2016-08-18 9 views
0

私は自分のWebアプリケーションのロール/パーミッションシステムを開発しています。暗黙的なアクセス許可/ロールでセキュリティモデルを定義する

簡単に。ユーザーは、複数のプロジェクトにアクセスできます。これは参加であり、とりわけ、参加者は多くの権利を持つプロフィールを持っています。したがって、これらはプロジェクト内のユーザー特有の権利です。参加者にはタイプ(管理者、サポートなど)もあります。

プロファイルは役割に基づいています。ロール(おそらく名前が不適切)は、管理者によって事前に定義されたデフォルトの権利構成を持つ事実上標準プロファイルです。新しいプロファイルを作成するときは、役割を選択して基本として機能させ、必要に応じて権限を調整します。プロファイルは、1人のユーザーに限定されません。

これまでのところ、とても良い(かない!あなたは私を教えて!)

権利は、コンテキスト/主題別にグループ化されます。したがって、例えば、「プロジェクト・タスク」に関するすべての権利はグループ化されています。私はそれがUIによって処理されているので、これをモデル化していません(それが悪いかどうかはわかりません)。

私の問題は次のとおりです。参加タイプに応じて、特定の権利は暗黙的であり、無効にしないでください。したがって、「サポート」参加の役割を作成する際には、「自分のサポートチケットを参照する」権利を暗示し、表示しないか、無効にして変更できないようにする必要があります。一方、別の参加型は、この権利を任意に割り当てることができます。

私は基本的に参加者タイプ/右=適用不可、適用可能(選択済みまたはしない)のスプレッドシートを持っています&常に適用されます。例:

| RIGHT    | INV | SUP | ADM | 
| ------------------ | --- | --- | --- | 
| G_PROJECTS_READ | I | I | Y | 
| G_PROJECTS_UPDATE | Y | N | Y | 
| G_PROJECTS_CREATE | N | N | Y | 
| G_PROJECTS_PUBLISH | N | N | Y | 

Where Y = Type can toggle right on/off, N = Type doesn't have right 
& I = Implied i.e. Type has right and it can't be deselected 

これをどのようにモデル化することができますか?

model

多くのおかげで、

AW

+0

スプレッドシートにエンコードされた可能性のある「参加の役割」を作成することで、モデルの複雑さを取り除くことを検討しました。 ユーザーに参加を割り当てることを任されている人は、その場で設定する(潜在的にミスをする)必要はなく、適切な役割を選択するだけです。したがって、サンプルスプレッドシートの場合、参加タイプに結びつけることのできる最大2つの選択肢(管理者の役割を無視します)があります:「PARTICIPATION_READ_ONLY」と「PARTICIPATION_READ_UPDATE」 – fspinnenhirn

答えて

1

役割は、基本的には、事前に定義されたプロファイルです。そのような様々なロールは、アプリケーションの初期化中に作成されたプロファイルの単なるインスタンスになります。役割は別のクラス/エンティティとしては必要ありません。

Set<Right> getAllRights(),Set<Right> getEditableRights()およびSet<Right> getAllowedRights()を持つinterface IProfileを作成します。方法getAllowedRights()は、このプロファイルに属するすべてのユーザーが持つデフォルトの権利を与えます(これらの権利は変更できません)。メソッドgetEditableRights()は、新しいロールを作成する際に、どの権限を管理者が編集できるかを示します。

今やProfileになると、それはTypeで構成され、IProfileを実装します。今度は、プロファイルを実装することができます

マイナスは、差異の設定操作を意味し、プラスはここでは組合を意味します。 Typeため

デフォルトの権利はgetEditableRights()で配られていないが、私はIProfileを作成し、なぜ彼らは、総allowedRightsはsetAllowedRights(Set<Right> addedRights)

にセットアップするために使用されていますか?あなたがTypeを持っており、(評判もユーザーに権利の固定セットを与える)Reputationを言うだろうと、そしてあなただけ実装することができ、他の複数のクラスで構成されているProfileの異なる種類を作成したい場合には

IProfileは別の方法であり、コードはIProfileに依存していても同じように動作します。

+0

ありがとうございます。型/右の対応関係(静的にコード列挙型、DBなど)をどのように格納するのかまだまだわかりません。私は、質問に対応表の例を挙げました。また、悪用しようとする潜在的なフレームワークとしてApache Shiroを探し始めました... –

関連する問題