MVC [Autorize] плюс роли из строки - PullRequest
0 голосов
/ 03 апреля 2012

Эй, у меня есть идея, но проблема в том, что я не могу сделать эту работу.

в MVC мы можем использовать [Authorize] для "защиты" некоторых действий / контроллеров, мы можем сделать следующий шаг и дать некоторыеубеждение для ролей и пользователей.

[Authorize(Roles="Boss", User="Secretary"]

Это работает хорошо, но это плохо, потому что в реальной жизни мы не знаем, кто будет иметь права на это.Так что идея заключалась в том, чтобы создать цепочки ролей и пользователей и вернуться, чтобы разрешить Microsoft создавать магию на этом.

[Authoize(Role=RoleString(), User=UserString())]

Конечно, это не работает, как заставить это работать?

1 Ответ

0 голосов
/ 03 апреля 2012

Проблема в том, что AuthorizeAttribute ожидает константу для строк User и Role. Вам нужно будет создать атрибут CustomAuthorizeAttribute, похожий на тот, который содержится в этом сообщении в блоге .

Допустим, у вас есть строка, которую вы храните в своем файле web.config, которая выглядит примерно так:

<add key="authorizedUsers" value="Dave,Chuck,Sally" />

и тогда у вас есть свой собственный атрибут авторизации, который будет выглядеть примерно так:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public IAuthorizationService _authorizationService { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var user = httpContext.User;
        if (!user.Identity.IsAuthenticated)
        {
            return false;
        }

        var users = System.Configuration.ConfigurationManager.AppSettings["authorizedUsers"].Split(',');
        if users.Contains(user.Identity.Name)
        {
            return true;
        }

        return _authorizationService.Authorize(httpContext);
    }
}

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

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