我正在使用 asp.net core mvc。在默认身份验证旁边,我添加了非常具体的授权,这是通过使用完成的ResultFilterAttribute
属性。
将来,为了确保开发人员为每个控制器方法指定权限,我想在执行操作之前检查是否为方法设置了属性。
可以在MVC中间件中完成吗?或者也许有更好的方法?
谢谢基督教 https://stackoverflow.com/users/2441442/christian-gollhardt提及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>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)