Существуют ли какие-либо пакеты и т.д., реализующие динамический доступ к контроллеру ролей для MVC3? - PullRequest
1 голос
/ 14 декабря 2011

Я статически разрешил доступ к контроллерам / методам действий, используя стандартный атрибут Authorize с ролями. Я использую поставщика членства ASP.Net по умолчанию.

Один из наших клиентов хочет более детального контроля доступа. Они хотели бы иметь возможность динамически назначать, какие роли могут получить доступ к каким контроллерам / действиям и т. Д. Я видел ответы, в которых говорилось о реализации атрибута CustomAuthorize.

Просто поинтересовался, есть ли какие-нибудь наборы инструментов и т. Д. Для этого. Это кажется достаточно стандартной функцией. Я думаю, что-то вроде этого http://kbochevski.blogspot.com/2009/11/mvc-custom-authorization.html

1 Ответ

6 голосов
/ 17 декабря 2011

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

public class DynamicAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"];
        var actionName = httpContext.Request.RequestContext.RouteData.Values["action"];

        // Get this string (roles) from a database or somewhere dynamic using the controllerName and actionName
        Roles = "Role1,Role2,Role3"; // i.e.  GetRolesFromDatabase(controllerName, actionName);

        return base.AuthorizeCore(httpContext);
    }
}

Просто поместите этот атрибут в любой метод действия, требующий авторизации, и найдите в базе данных имя контроллера и имя действия, чтобы получить необходимые роли.

Надеюсь, это поможет,

Mark

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