2

プリンシパルを持つユーザーがいます。

次の方法で、ユーザーが管理者であるかどうかを確認できることを知っています。

Thread.CurrentPrincipal.IsInRole("Administrators")

私もこれを見ました:

PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand(); //under a try-catch cntext

私のテストから、彼らは同じ結果を返します

質問 :

  • 彼らは同じですか ?
  • そうでない場合、いつ which を使用する必要がありますか?
4

2 に答える 2

3

Demand()呼び出しは例外をスローし、キャッチされない場合は自動的に呼び出しスタックを上に伝播します。呼び出しIsInRole()は比較テストであり、どちらかまたはコードを実行するために使用できます。

それらは同じですか: いいえ、一方は例外をスローし、もう一方は true/false 値を返します。

which を使用する必要があるDemand()場合: 権限がない場合に処理を強制終了する場合に使用IsInRole()し、条件付き処理を実行するために使用します。

于 2013-06-06T13:32:16.687 に答える
1

Petesh の回答に加えて、PrincipalPermission は PrincipalPermissionAttribute を使用して宣言的に課すことができます。

AOP のような検証が好きな場合、これは実行可能な代替手段になる可能性があります。検証コードによってビジネス ロジックが損なわれることはなく、ランタイムによって自動的に適用されます。

[PrincipalPermission(...)]
public void Foo()
{ }
于 2013-06-06T13:55:22.840 に答える