роли asp mvc из httpcontext - PullRequest
       2

роли asp mvc из httpcontext

0 голосов
/ 17 февраля 2011

я хочу передать текущее имя области атрибуту авторизации, например:

[SexyAuthorize(Roles = Url.RequestContext.RouteData.Values["area"])]
public class FormsController : Controller
{
}

но Url является членом контроллера. как я могу пройти другим путем?

я знаю, что могу использовать User.InRole в каждом методе, но я хочу сделать это для класса. Спасибо.

1 Ответ

0 голосов
/ 17 февраля 2011

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

Что-то вроде:

[SexyAuthorize(RolesRouteParamName = "area")]
public class FormsController : Controller
{
    ...
}

и затем:

public SexyAuthorizeAttribute: AuthorizeAttribute
{
    public string RolesRouteParamName { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null)
        {
            throw new ArgumentNullException("httpContext");
        }
        var roles = httpContext.Request.RequestContext.RouteData.Value[RolesRouteParamName];
        // TODO: continue with the implementation...
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...