11

asp.netメンバーシップ、ロールプロバイダーなどの設定については、たくさんの質問(および情報)があります。マイクロソフトが提供する組み込みのプラットフォームを使用するか、基本クラスを拡張して独自の役割を使用するかどうか。

デフォルトのプロバイダーを拡張し、独自のメンバーシップおよびロールプロバイダーを実装することにしました。さて、私の質問は、特に役割認証に関するものです。

従来は、「マネージャー、管理者、従業員、スーパーユーザー」などの役割を作成していました。しかし、私がより細かい制御であると考える許可に関して、あなたはどうしますか/すべきですか?詳しく説明させてください。

私のasp.netmvcサイト内には、管理、管理、メッセージング、レポートなどのさまざまな領域があります。「管理者」、「マネージャー」、「レポーター」など、それぞれの役割を作成します。適切な役割がないと、次のことができます。サイトのその領域にアクセスできません。したがって、クラスレベルでこれを使用してコントローラー全体をロックダウンします。

しかし、ここで例として1つの領域を取り上げます。メッセージング、およびCRUDに対してよりきめ細かい権限が必要だと言います。メッセージの作成、メッセージの表示/読み取り、メッセージの編集、メッセージの削除など。

最後に私の質問。このより細かい制御をどのように実装するのが最善でしょうか?私が見ているアプローチの1つ(それが良いものかどうかはわかりません)は、すべてに対してasp.netメンバーシップロールを作成することです。だから私は持っているかもしれません...

メッセンジャー(幅広いレベルの役割)、CreateMessage、ReadMessage、EditMessage、DeleteMessage。

一方では、一部のユーザーがメッセージを読んだり表示したりできるようにしたいと思います。ただし、必ずしもそれらを作成または削除する必要はありません。個々のコントローラーアクションには、特定の役割を適用できます。

このアプローチに問題はありますか?もっといいアイデアはありますか?

これまでの解決策

独自のスキーマを作成し、カスタムメンバーシップとロールプロバイダーを実装することにしました。私のスキーマには以下が含まれます。

  • ユーザー
  • UserProfile
  • 許可
  • PermissionAssignment
  • 役割
  • RoleAssignment

翌日か2日は不在になりますが、機会があれば詳細情報を更新します。

4

3 に答える 3

5

承認メカニズムでの役割を忘れて、代わりに権限を要求する必要があると思います(最後に、役割は権限の集合体です)。そのように見ると、Authorize属性はエンティティとアクションを要求する必要があります。特定の役割。何かのようなもの:

[Authorize(Entities.Message, Actions.Create)]
public ActionResult CreateMessage()

[Authorize(Entities.Message, Actions.Edit)]
public ActionResult EditMessage()

[Authorize(Entities.Message, Actions.View)]
public ActionResult ViewMessage()

そうすることで、柔軟性のないアクセスレベルの方法を決定するのではなく、役割が最善を尽くし、アクセス許可の収集を抽象化します。

編集: David Robbinsが指摘したような特定のルールを処理するために、マネージャーAはマネージャーBが作成したメッセージを削除できません。ただし、両方にこのコントローラーアクションにアクセスするために必要な権限がある場合、承認者はこのタイプのメッセージをチェックする責任を負いません。ルール、そしてアクションフィルターレベルでそれをチェックしようとしても苦痛になるので、あなたができることは、承認検証をActionResultに拡張し(検証結果を保持するアクションパラメーターを注入する)、ActionResultにそこに論理的な決定があり、すべての議論が整っています。

これは同様の質問であり、ここで指摘されているケースとは異なりますが、アクションパラメータを使用して承認検証を拡張するための良い出発点です。

于 2010-07-21T16:04:03.263 に答える
2

CRUDの例に関して、あなたは本当に承認について話していませんか?承認はメンバーシップの役割「マネージャー」と「レポーター」の間で異なりますか?役割がメッセージ間の読み取りと書き込みの承認を区別しない場合は、これらのよりきめ細かいアクティビティ用に別のメカニズムを作成する必要があると思います。

各アクション(EditMessage、DeleteMessage)の役割を作成する場合、マネージャーAがマネージャーBのメッセージを削除できない場合はどうしますか?

于 2010-07-21T10:39:26.060 に答える
-1

[Authorize(Roles="Administrator")]コントローラの上になどを追加するだけでなく。その属性を個々のアクションに配置することもできます

于 2010-07-21T10:28:49.063 に答える