Атрибут Authorize Attribute MVC 3 & Web.Config AppSettings - PullRequest
3 голосов
/ 22 сентября 2011

Кто-нибудь знает, есть ли способ использования значения в разделе Web.Config AppSettings для атрибута Authorize для контроллера в MVC3?

В настоящее время я использую что-то подобное в web.config:

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

, а затем я попытался включить класс и использовать значение в атрибуте Authorize, но .NET жалуется, что значения не являются константами и т. Д.

Я просто хочу иметь возможность использовать набор значений в web.config для фильтрации авторизации, чтобы различные развертывания могли использовать вариации имен ролей в зависимости от конфигурации своей системы.

Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

Вы должны написать свой собственный класс AuthorizationAttribute, который во время выполнения считывает значение из web.config. В .NET невозможно объявить атрибут, используя значения, зависящие от времени выполнения.

4 голосов
/ 22 июля 2014

Вот рабочий пример:

[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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...