我创建了一个自定义授权,当一个动作有[Authorize]
时会被忽略:
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);
}
}
...then 我在全局过滤器中配置了它,默认只允许管理员:
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()
{
}
}
...it 工作正常。但是,如果我将[Authorize]
放在控制器中,MyGlobalAuthorizeAttribute
将无法检测到它。
我找到了许多覆盖的例子,但所有这些都是关于动作覆盖控制器或全局授权,但不是覆盖全局授权的控制器。
是否有可能实现这一目标?
1 回答
您还需要检查 ControllerDescriptor:
ControllerDescriptor.IsDefined(...)的文档