使用活动目录角色提供程序 MVC4 授权属性

Authorise attribute using active directory role provider MVC4

我目前正在使用 AspNetWindowsTokenRoleProvider 为我的控制器操作提供授权:

[Authorize(Roles = "domain\group")]
public ActionResult Index()
{
code.....
}

与其硬编码角色名称 ("domain\group"),不如使用常量。我想用调用设置 class 来替换它,这将从数据库或文件中获取它。

我认为要么有一种方法可以在提供程序中内置执行此操作,要么我需要用我自己的实现替换提供程序。 我画了一张空白的谷歌搜索,所以我想我问的问题不对!

任何人都可以指出我实现这一目标的正确方向。 谢谢

我已经解决了,所以这是解决方案,以防有人想做同样的事情。

  1. 创建一个新的 class 继承自 WindowsTokenRoleProvider
   public class MyADProvider : WindowsTokenRoleProvider
    {
        //settings key
        public const string Users = "Authorisation.AdGRoup.Users";
        public const string Admins = "Authorisation.AdGRoup.Admins";

    private ISettingsRepository settingsRepository;


    public override string[] GetRolesForUser(string username)
    {
        // settings repository reads from settings file or DB
        // actual implementation is up to you
        this.settingsRepository = new SettingsRepository();

        // get all the AD roles the user is in 
        var roles = base.GetRolesForUser(username);

        List<string> returnedRoles = new List<string>
                        {
                            this.GetADRole(roles, Admins), 
                            this.GetADRole(roles, Users)
                        };

        return returnedRoles.ToArray();
    }

    private string GetADRole(string[] usersAdRoles, string roleSettingName)
    {
//Get the actual name of the AD group we want from the settings
        var settingName = this.settingsRepository.GetSetting(roleSettingName);

        return usersAdRoles.Contains(settingName) ? roleSettingName : string.Empty;
    }
}

然后更改 web.config 以使用新的 class:

  <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
  <providers>
    <clear />
    <add name="AspNetWindowsTokenRoleProvider" type="MyADProvider" applicationName="/" />
  </providers>
</roleManager>

然后我可以在代码中使用设置键:

 [Authorize(Roles = MysADProvider.Admins)]
    public ActionResult Index()
    {}