在asp.net MVC应用程序的web.config中指定角色

19

我正在创建一个使用表单身份验证的MVC应用程序。我正在针对Active Directory进行身份验证,因此创建了自定义的RoleProvider。我的应用程序只涉及一小部分角色,迄今为止我一直在web.config的appSettings部分中定义这些角色:

<appSettings>
  <add key="DirectorRole" value="Domain\Directors" />
  <add key="ManagementRole" value="Domain\Managers" />
  ...
</appSettings>

然而,我采用这种方法遇到了几个问题:

  1. 我无法在我的控制器数据注释中引用这些设置:[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])],因为它不会编译,所以我必须再次指定组的名称:[Authorize(Roles = "Domain\\Directors")]
  2. 在我的web.config中,我想指定我的角色提供程序使用的groupsToUse,并只引用一个现有列表,而不是维护两个相同角色集的单独列表。

似乎必须有一种更好/可重用的方式来定义web.config中的角色,请问有人可以指点我正确的方向吗?

2个回答

27

我更喜欢使用自定义授权属性,就像这个。

public class MyAuthorizeAttribute : AuthorizeAttribute {

    public MyAuthorizeAttribute(params string[] roleKeys) {
        List<string> roles = new List<string>(roleKeys.Length);

        //foreach(var roleKey in roleKeys) {
            //roles.Add(ConfigurationManager.AppSettings["DirectorRole"]);
        //}
        var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles");
        foreach(var roleKey in roleKeys) {
            roles.Add(allRoles[roleKey]);
        }

        this.Roles = string.Join(",", roles);
    }
}
在你的控制器中,使用:
[MyAuthorize("DirectorRole")]

在你的web.config文件中

  <configSections>
    <section
      name="roles"
      type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <roles>
    <add key="DirectorRole" value="Domain\Directors" />
    <add key="ManagementRole" value="Domain\Managers" />
  </roles>

我希望这可以很好地解决你的第一个问题。稍加调整也可以解决第二个问题。


什么是角色?这个代码中的语句:this.Roles = string.Join(",", roles); 是否打错了,应该是 role? - Phil3992
@Phil3992:它有导致任何编译错误吗?我猜Role是AuthorizeAttribute的属性。 - Mohayemin
@Mohayemin 对我来说,角色没有被识别。即使添加了system.web.mvc引用。 - Phil3992
@Phil3992:这应该可以工作。也许你有其他问题导致它无法工作。 - Mohayemin
@Mohayemin 不想抢占帖子,但我可以确认它有效。清理了项目。准备就绪! - Phil3992
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接