在一个asp.net MVC应用程序的web.config文件中指定角色(Specifying Ro

2019-06-26 09:27发布

我创建与窗体身份验证的MVC应用程序。 我对认证活动目录等方面都创造了一个自定义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中定义的角色,更好的/可重复使用的方式,可以有人点我在正确的方向吗?

Answer 1:

我宁愿使用自定义授权属性。 像这个。

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>

我希望这将解决您的第一个问题就好了。 和twiking一点就能解决第二个了。



Answer 2:

请看看这个很好的例子,在你面对笔者有关该问题的谈判。

http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/



文章来源: Specifying Roles in web.config of an asp.net MVC application