2009-12-21 8 views
3

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

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

ответ

3

Да, вы можете. Если вы реализовали свой атрибут Авторизовать как 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); 
      } 
     } 
    } 
} 

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

bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false); 
Смежные вопросы