有没有人知道在MVC3中的控制器的Authorize属性的Web.Config AppSettings部分中是否有使用值的方法?
我目前在web.config中使用类似的东西:
<add key="AdminRole" value="Admins"/>
,然后我尝试拉入类并使用Authorize属性上的值,但.NET抱怨值不是常量等。
我只是希望能够使用web.config中的值集来过滤授权,以便不同的部署可以根据系统配置使用角色名称的变体。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:5)
您必须编写自己的AuthorizationAttribute类,该类在运行时从web.config中读取值。在.NET中,无法使用依赖于运行时的值声明属性。
答案 1 :(得分:4)
这是一个有效的例子:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeByConfig : AuthorizeAttribute
{
/// <summary>
/// Web.config appSetting key to get comma-delimited roles from
/// </summary>
public string RolesAppSettingKey { get; set; }
/// <summary>
/// Web.config appSetting key to get comma-delimited users from
/// </summary>
public string UsersAppSettingKey { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!String.IsNullOrEmpty(RolesAppSettingKey))
{
string roles = ConfigurationManager.AppSettings[RolesAppSettingKey];
if (!String.IsNullOrEmpty(roles))
{
this.Roles = roles;
}
}
if (!String.IsNullOrEmpty(UsersAppSettingKey))
{
string users = ConfigurationManager.AppSettings[UsersAppSettingKey];
if (!String.IsNullOrEmpty(users))
{
this.Users = users;
}
}
return base.AuthorizeCore(httpContext);
}
}
装饰你的控制器类或方法如下:
[AuthorizeByConfig(RolesAppSettingKey = "Authorize.Roles", UsersAppSettingKey = "Authorize.Users")]
Authorize.Roles和Authorize.Users是web.config appSettings。