1

私たちの会社には、他の開発者チームが使用できるように公開したい Web サービスがあります。それでも、誰がそれを使用するか、およびこの特定のメソッドを呼び出すことが許可されているかどうかを制御したいと考えています。

したがって、Web サービスを使用したい各チームに、このキーを使用して呼び出し元が呼び出すことができるメソッドを示すキーを割り当てるソリューションを考え出しました。このキーは、各メソッドにパラメーターとして渡されます。このキーをパラメーターとして使用すると、次のようにすべてのメソッドの開始時にセキュリティ チェックを実行できます。

private bool CanCallMethod(string methodIdentifier, string authenticationKey)
{
  //check in db
}

public object GetLocation(string authenticationKey, int param1, string param2)
{
    if (!CanCallMethod(someMethodIdentifier, authenticationKey))
        throw new UnauthorizedAccessException();
    //method body
}

public object SetLocation(string authenticationKey, DateTime param1)
{
    if (!CanCallMethod(someOtherMethodIdentifier, authenticationKey))
        throw new UnauthorizedAccessException();
    //method body
}

しかし、私はすべての方法でそれをしなければなりません...そして、すべての新しい方法とすべての新しいWebサービスでそれについて覚えておく必要があります. 質問は次のとおり
です。メソッドの本体でチェックを明示的に呼び出すたびに、メソッドが呼び出されたときにこのチェックが実行されるようにクラスを設計する方法はありますか?
そうは思いませんが、常に尋ねる価値があります。

4

1 に答える 1

0

PostSharp、Unity、Castle などのツールで AOP を使用して、動的プロキシをインターセプトまたは作成できます。これにより、インターフェイスを実装するために一部のサービスを作り直す必要が生じる可能性があります。私は Unity の経験しかありませんが、インターフェイスから実装してから、それらを Aspects で接続するとうまくいくかもしれません。

多分これも役立つかもしれません:ビジネス ロジックで AOP スタイルの MVC のような承認を使用するための最良の無料の方法

于 2012-05-17T15:30:35.387 に答える