我已经实现了自己的Authorize
属性,我发现当我使用[Authorize]
时,它会查询检查权限。
有没有办法可以获得该权限并在当前使用Authorize
属性的控制器中使用它而无需重写和重新查询控制器中的代码?
答案 0 :(得分:3)
是的,你可以。如果您将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 controller的acrion中,您可以访问以下字段:
bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false);