问题 我正在MVC .NET中创建一个权限系统。我试图强制从IModel继承的所有方法都具有特定的属性,例如。许可
例如,
public class User : IModel
{
[Permission(Admin, Moderator)
public User GetUser(long userId){...}
[Permission(Admin)
public User DeleteUser(long userId){...}
public User EditUser(long userId){...}
}
有没有办法强制User的所有公共方法都具有Permission属性?例如,如果EditUser没有Permission属性,则上面的代码应该在启动时失败。
可能的解决方案
我正在考虑使用Autofac(依赖注入)来完成这项工作。但是,我还不熟悉.Net或Autofac。关于如何做到这一点的任何建议?
答案 0 :(得分:1)
我会编写一个使用反射验证属性存在的单元测试。
foreach(var method in typeof(User).GetMethods())
{
var permissionAttributes = method.GetCustomAttributes(typeof(PermissionAttribute)).Cast<PermissionAttribute>();
}
以上代码可能无法编译 - 从内存写入; - )
另外,如果要拦截方法调用并检查权限,可能需要谷歌interceptor
。 DI不会帮助你。
答案 1 :(得分:1)
您通常会在控制器上的操作级别而不是模型上控制授权。 MVC框架已经具有支持角色的Authorize属性。
http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
可以将此属性放在控制器上以强制执行所有操作的授权。