Динамически настраивайте авторизованные роли через файл конфигурации в приложении MVC - PullRequest
1 голос
/ 12 ноября 2009

У меня есть следующий атрибут, украшающий один из методов действия.

[Authorize(Roles = "Admin")]
public ActionResult DoAdminTask()
{
//Do something

   return View();
}

В настоящее время только пользователи в роли администратора могут вызывать этот метод, но это изменится. Могу ли я в любом случае сохранить список разрешенных ролей в файле конфигурации, а не жестко закодировать его в исходный код?

РЕДАКТИРОВАТЬ: Роли будут меняться со временем, и более 1 роли потребуется доступ. т. е. пользователи в любой роли A ИЛИ могут иметь доступ к роли B.

Ответы [ 3 ]

5 голосов
/ 12 ноября 2009

Нет способа сделать это с помощью стандартного атрибута authorize, но вы можете расширить атрибут authorize с помощью собственного настраиваемого атрибута authorize и использовать его для настройки соответствия между контроллером / действием и набором ролей.

0 голосов
/ 14 января 2018

Мне показалось, что этот вопрос заслуживает ответа с примером кода ... Принимая предложение @ tvanfosson о расширении класса AuthorizeAttribute, вот что я придумал (критика приветствуется).

AuthorizeFromConfiguration.cs

public class AuthorizeFromConfiguration: AuthorizeAttribute
{
    public new string Roles
    {
        get {
            return base.Roles;
        }
        set {
            var config = new ConfigurationBuilder()
                .SetBasePath(Environment.CurrentDirectory)
                .AddJsonFile("authorization.json")
                .Build();
            base.Roles = config[value];
        }
    }
}

authorization.json

{
    "Parts": {
        "Create": "contoso.com\\MyWebApp_CreateNewPart",
        "Edit": "contoso.com\\MyWebApp_EditPart"
    }
}

Пример использования :

[AuthorizeFromConfiguration(Roles = "Parts:Create")]
public class CreateModel : PageModel
{
    //...
}

Примечание. В моем тестировании веб-сайт необходимо было перезапустить до того, как вступили в силу любые изменения в файле authorization.json, даже когда я попытался изменить логику так, чтобы файл JSON читался на методе доступа get вместо set.

0 голосов
/ 12 января 2016

но вы можете использовать что-то вроде

public static class AppRoles
{
    public const string Users = "UsersRoleName";
    public const string Admin = "AdminRoleName";
}

и тогда Контроллер может иметь атрибут авторизации как

[Authorize(Roles = AppRoles.Admin)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...