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また、メソッド呼び出しをインターセプトしてアクセス許可を確認する場合は、Google で検索することをお勧めします。DIはあなたを助けません。

于 2012-05-02T09:12:19.123 に答える