授权属性MVC 3& Web.Config AppSettings Value

时间:2011-09-22 15:39:42

标签: asp.net-mvc-3 authentication

有没有人知道在MVC3中的控制器的Authorize属性的Web.Config AppSettings部分中是否有使用值的方法?

我目前在web.config中使用类似的东西:

<add key="AdminRole" value="Admins"/>

,然后我尝试拉入类并使用Authorize属性上的值,但.NET抱怨值不是常量等。

我只是希望能够使用web.config中的值集来过滤授权,以便不同的部署可以根据系统配置使用角色名称的变体。

任何帮助将不胜感激,谢谢!

2 个答案:

答案 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。