Я создал пользовательский Авторизируйтесь, которое игнорируется, когда действие имеет [Authorize]
:Override Global Авторизовать в контроллере вместо действий
public class MyGlobalAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// check if action is decorated with an Authorize...
var action = filterContext.ActionDescriptor
if (action.IsDefined(typeof(AuthorizeAttribute), true))
return;
base.OnAuthorization(filterContext);
}
}
... Затем я настроил его в глобальных фильтров, позволяя только админам по умолчанию:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyGlobalAuthorizeAttribute() { Roles = "Admin" });
}
}
Если я декорировать действие, как это:
public class MyController: Controller
{
[Authorize] // non-admins can access this action..
public ActionResult Index()
{
}
}
... он отлично работает. Однако, если я поставлю [Authorize]
в контроллер, MyGlobalAuthorizeAttribute
не обнаружит его.
Я нашел много примеров переопределения, но все из них около действий переопределения контроллера или глобальных Авторизируйтесь, но не является контроллер переопределения глобального Авторизовать.
Можно ли достичь этого?
Я искал в '' filterContext.Controller' и filterContext.Controller.ControllerContext', когда он был только в моих глазах , внутри 'action'. Большое спасибо!!! – Alisson