Autofac:如何强制从特定接口继承的对象的所有方法都具有属性

时间:2012-05-02 09:10:19

标签: c# .net autofac custom-attributes

问题 我正在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。关于如何做到这一点的任何建议?

2 个答案:

答案 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

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