Получить разрешение от Авторизовать Атрибут?
Я реализовал свой собственный Authorize
атрибут, и я замечаю, что он запрашивает проверку разрешений при использовании [Authorize]
,
Есть ли способ получить это разрешение и использовать его в текущем контроллере, который применяет Authorize
атрибут без необходимости переписывать и запрашивать код в контроллере?
1 ответ
Решение
Да, ты можешь. Если вы реализовали свой атрибут 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);
}
}
}
}
В отчаянии контроллера anoteated вы можете получить доступ к полю с помощью:
bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false);