1

问题 我正在 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 还不是很熟悉。关于如何解决这个问题的任何建议?

4

2 回答 2

1

您通常会在控制器而不是模型上的操作级别控制授权。MVC 框架已经有一个支持角色的 Authorize 属性。

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

可以将此属性放在控制器上以强制执行所有操作的授权。

于 2012-05-07T15:48:51.657 回答
1

我会编写一个使用反射来验证属性存在的单元测试。

foreach(var method in typeof(User).GetMethods())
{
    var permissionAttributes = method.GetCustomAttributes(typeof(PermissionAttribute)).Cast<PermissionAttribute>();
}

上面的代码可能无法编译 - 从内存中写入 ;-)

interceptor此外,如果您想拦截方法调用并检查权限,您可能需要谷歌搜索。DI 不会帮助你。

于 2012-05-02T09:12:19.123 回答