Получить разрешение от Авторизовать Атрибут? - PullRequest
3 голосов
/ 21 декабря 2009

Я реализовал свой собственный атрибут Authorize и заметил, что он запрашивает проверку разрешений при использовании [Authorize].

Есть ли способ получить это разрешение и использовать его в текущем контроллере, который применяет атрибут Authorize без необходимости переписывать и запрашивать код в контроллере?

1 Ответ

3 голосов
/ 22 декабря 2009

Да, вы можете. Если вы реализовали свой атрибут Authorize как ActionFilterAttribute, вы можете использовать коллекцию ViewData для хранения информации, подобной этой:

    public class RequireRegistrationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (request != null && 
            response != null)
        {
            bool isAuthenticated = request.IsAuthenticated;
            filterContext.Controller.ViewData["IsAuthenticated"] = isAuthenticated;

            if (!isAuthenticated)
            {
                string url = String.Format(
                   "/?ReturnUrl={0}", 
                   HttpUtility.UrlEncode(request.Url.ToString()));
                response.Redirect(url);
            }
        }
    }
}

В акрионе анотированного контроллера вы можете получить доступ к полю с помощью:

bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false);
...