Первое, что делает AuthorizeAttribute
, - это проверяет, аутентифицирован ли пользователь.Если это не так, то тогда будет произведено перенаправление на страницу входа в систему.
AuthorizeAttribute
в основном включает проверку подлинности с помощью элемента авторизации:
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
используйте AuthorizeAttribute без ролей / пользователей, как вы делаете в своем примере ([Authorize]), в основном это просто проверка, чтобы убедиться, что пользователь аутентифицирован в этом случае.AuthorizeAttribute вместо того, чтобы делать этот код в вашем контроллере.Вы можете сделать следующее:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.Result = CreateResult(filterContext);
}
protected ActionResult CreateResult(AuthorizationContext filterContext)
{
var controllerContext = new ControllerContext(filterContext.RequestContext, filterContext.Controller);
var controller = (string)filterContext.RouteData.Values["controller"];
var action = (string)filterContext.RouteData.Values["action"];
// any custom model here
var model = new UnauthorizedModel();
// custom logic to determine proper view here - i'm just hardcoding it
var viewName = "~/Views/Shared/Unauthorized.cshtml";
return new ViewResult
{
ViewName = viewName,
ViewData = new ViewDataDictionary<UnauthorizedModel>(model)
};
}
}