我正在使用asp.net核心mvc。在默认身份验证旁边,我添加了非常具体的授权,使用ResultFilterAttribute
属性完成。
将来,为了确保开发人员要为每个控制器方法指定权限,我想在执行操作之前检查是否为方法设置了属性。
可以在MVC中间件中完成吗?或者可能有更好的方法?
答案 0 :(得分:1)
感谢Christian提及ControllerFactory
。在我的案例中,这是正确的方法。
public class MyControllerFactory : DefaultControllerFactory
{
public MyControllerFactory (IControllerActivator controllerActivator, IEnumerable<IControllerPropertyActivator> propertyActivators)
: base(controllerActivator, propertyActivators)
{
}
public override object CreateController(ControllerContext context)
{
var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
.Any(a => a.GetType().Equals(typeof(PermissionFilterAttribute)));
if (!isDefined)
{
throw new NotImplementedException();
}
return base.CreateController(context);
}
}
在Startup.cs需要告诉mvc在解析IControllerFactory接口时使用MyControllerFactory。
services.AddSingleton<IControllerFactory, MyControllerFactory>();