Jam*_*mes 19 asp.net-mvc web-config roleprovider asp.net-mvc-3
我正在使用表单身份验证创建一个MVC应用程序.我正在对活动目录进行身份验证,因此创建了一个自定义RoleProvider.我的应用程序只关注一小部分角色,到目前为止我一直在web.config的appSettings部分中定义:
<appSettings>
<add key="DirectorRole" value="Domain\Directors" />
<add key="ManagementRole" value="Domain\Managers" />
...
</appSettings>
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这种方法的几个问题:
[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]
因为它不会编译所以我必须再次指定组的名称:[Authorize(Roles = "Domain\\Directors")]
.似乎必须有一个更好/可重用的方法来定义web.config中的角色,有人能指出我正确的方向吗?
Moh*_*min 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,使用:
[MyAuthorize("DirectorRole")]
Run Code Online (Sandbox Code Playgroud)
在你的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>
Run Code Online (Sandbox Code Playgroud)
我希望这能解决你的第一个问题.稍微加倍也会解决第二个问题.
归档时间: |
|
查看次数: |
15622 次 |
最近记录: |