我创建与窗体身份验证的MVC应用程序。 我对认证活动目录等方面都创造了一个自定义RoleProvider。 我的应用程序只涉及一小部分,其到现在为止,我一直在我的web.config的appSettings部分定义的角色:
<appSettings>
<add key="DirectorRole" value="Domain\Directors" />
<add key="ManagementRole" value="Domain\Managers" />
...
</appSettings>
但是我遇到了一对夫妇使用这种方法的问题:
- 我不能在我的位指示数据的注释中引用这些设置:
[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]
因为它不会编译,所以我要再次指定组的名称: [Authorize(Roles = "Domain\\Directors")]
。 - 在我的web.config,我想指定groupsToUse我的角色提供,只是引用一个已经存在的列表,而不是保持相同的角色集的两个单独列表。
看来,必须有在web.config中定义的角色,更好的/可重复使用的方式,可以有人点我在正确的方向吗?
我宁愿使用自定义授权属性。 像这个。
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一点就能解决第二个了。
请看看这个很好的例子,在你面对笔者有关该问题的谈判。
http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/