6

私はサイトで作業しています。このサイトには、特定のユーザーが完全に利用できるモジュール、他のユーザーが半利用できるモジュール、残りのユーザーが利用できないモジュールがあります。

例えば:

  • 「従業員」は、自分に割り当てられたカスタマーサポートチケットに応答できます。

  • 「マネージャー」は、特定の従業員のチケットの表示を含め、すべての従業員を管理し、チーム内のチケットをサポートすることができます。

  • 「管理者」は、すべてのチームのすべてのマネージャー、従業員、チケット、およびその他のコア機能を管理できます。

さらに、一部のページには、現在のユーザーが管理者または管理者である場合に表示される追加のフィールドがいくつかあります。(たとえば、削除/フラグを立てるためのリンク)。これらは従業員には表示されません。

次のロジックを処理する「パーミッション」モデルを1つ作成したいと思います。

  • ユーザーが現在のページにアクセスできるかどうかを判断します。

  • ページの特定の部分を表示するかどうかを決定します。(たとえば、管理者と管理者にのみ表示される編集/削除用の特別なリンク)。

このクラスを設計するためのいくつかの推奨事項/アドバイス、特に2番目の要件を達成するために必要なメソッドが必要です。

4

3 に答える 3

3

この問題が発生したときに私がこの問題に取り組んだ方法は、実行できる各アクション、またはそれ自体を示すことができる情報の一部を提供することPermissionです。それぞれUserにのコレクションがありPermissionsます。これから、構造の他のレイヤーを追加して、階層やアクセス許可のカテゴリなど、存在する膨大な数のアクセス許可を管理するのに役立てることができます。

それが整ったら、さまざまな部分に必要な権限があるかどうかを尋ねさせるか、テイクとセットを持って、特定のユーザーがUser必要な権限を持っているかどうかを判断することができます。どちらの方法でも問題なく動作しますが、どちらを選択するかによって、依存関係とシステムのアーキテクチャに影響があります。PermissionManagerUserPermissionsPermissions

このPermissionManagerアプローチには、アプリケーションの一部がに依存する必要がないという利点があります。そのため、適切なアクセス許可がない場合、またはすべてのアクセス許可が適切な場合に常に返さUserれる別の方法を使用できます。PermissionManagerFalseTrue

単純な状況では、このアプローチはやり過ぎである可能性があり、最初はそう思われることがよくありますが、基本的な階層型または粗粒度の役割を使用するルートをたどり、私が取り組んだほぼすべてのシステムがすぐに手に入ることを好みましたほとんどのバニラ、事前に構築された役割ベースの許可システムでは複雑です。

于 2011-04-18T14:12:51.477 に答える
3

データベースの観点からのこの問題への私のアプローチは、ユーザーのリストを保持するユーザーテーブル、ロールのリストのロールテーブルを用意することです。例:employee、manager、admin; システムで使用可能なすべてのアクション/機能のすべての値と、特定の役割に対するそのアクセス許可を格納するアクセス許可テーブル。たとえば、管理者の場合、作成、編集、削除、表示などのアクション/機能の値はすべてtrueです。以下に関係を示しますが、(N)----(N)は多対多の関係です。

ユーザー(N)-------(N)役割(N)--------(N)権限

于 2011-04-21T02:02:47.617 に答える
0

私の印象では、従業員、マネージャー、管理者などの役割を利用する必要があります。したがって、これらを含むロールテーブルで十分です。次に、特定のアクション/パーミッションに対して、分岐ロジックを使用する必要があります。たとえば、User.IsInRole( "employee")//カスタマーサポートチケットを処理するロジックを挿入します。elseifUser.IsInRole( "manager")//マネージャーの責任を処理するロジックを挿入します

そして最後に、管理者の責任に対処するためのロジック

したがって、これを実現するには、usersテーブルとrolesテーブルの両方が必要です。それが役に立てば幸い

于 2011-04-18T14:20:19.443 に答える