0

私は、基本的なログイン、製品の注文、他のユーザーの管理など、各ユーザーが複数の役割/権限を持つことができる Web サイトに取り組んでいます。この上にストアがあり、各ストアには複数のユーザーが管理できます。各ストアには、独自の権限セットもあります。

私は混乱しており、これをデータベースで表現する最善の方法がわかりません。今、私は考えています:

ユーザー ロール users_roles ストア store_users

しかし、ストアの個別の権限を追跡するために、stores_roles テーブルと store_users_roles テーブルも用意する必要がありますか?それとも、ロールを単一の「ロール」テーブルに限定しておく必要がありますか?

当初はロール テーブルを 1 つだけ持つことを考えていましたが、複数のストアでロールを持つユーザーはどうなるでしょうか。つまり、ユーザーに「ストア製品の更新」などの役割が与えられている場合、これがどのストアを参照しているかを判断する何らかの方法が必要になります。store_users_roles テーブルは、store_id フィールドを持つことでこれを修正できます。したがって、ユーザーは、ストア #42 の「ストア製品の更新」と「ストア製品の削除」、およびストア #84 の「ストア製品の更新」のみを持つことができます。

ここで意味を成していることを願っています。

編集

みんな情報ありがとう。どうやらやりたいことがあるようです。これは私が取り組んでいる単なる楽しいプロジェクトですが、RBAC は常に私がもっと理解したいと思っていたものです。

4

4 に答える 4

2

これはおそらく今では明らかですが、役割ベースのアクセス制御困難です。私の提案は、「クールなもの」に費やすことを望んでいたすべての時間をその一部に費やしたくない場合を除いて、独自のものを作成しようとしないことです。

RBAC (ACL と誤ってラベル付けされることもあります) を実装する柔軟で徹底的にテストされた承認ライブラリは数多くあります。私の提案は、ニーズに合ったものを見つけて使用することです。あなたが車輪のオタクでない限り、車輪を再発明しないでください。

于 2009-02-20T02:13:49.827 に答える
1

あなたのモデルは私には大丈夫に見えます。あなたが必要だと思う唯一の変更は、ロールの粒度に関するものです。今、あなたの役割はただの作戦です。

ただし、最初に、多対多の関係 b/wa ロールとストアを解決するジョイント テーブルである store_role テーブルが必要です。つまり、1 つの店舗に多くの役割を持たせることができ、1 つの役割を複数の店舗で行うことができます。

例: StoreA は顧客を作成、更新、削除できます。DELETE customer は、StoreA、StoreB、および StoreC で実行できます。

次に、ユーザーを user_store_roles テーブルの store_role_id に自由に関連付けることができます。

これで、user_store_role レコードには user_id と store_role_id が含まれます。

のコレクション

SELECT * FROM USER_STORE_ROLE WHERE user_id = @userID

すべてのストアでユーザーの許可されたすべての操作を返します。

特定のストア内のユーザーのロールのコレクションについては、上記の内部結合を user_store テーブルに実行し、WHERE のような部分を追加します。

ここで、STORE_ROLE.store_id = @storeID

于 2009-02-20T01:06:53.497 に答える
1

一連のストアで特定の役割を実行する権限があれば、各ストアで同じ権限を持つ可能性が高いと思われます。したがって、ロール テーブルが 1 つあれば十分でしょう。したがって、"joe" は "店舗の商品の更新" と "店舗の商品の削除" を実行し、user_stores テーブルを使用して、彼がアクセスできる店舗を一覧表示できます。そのリスト全体について、彼はすべてのストアで同じ権限を持っていると仮定します。

ビジネス ルールが、あるストアでは更新と削除が可能で、別のストアでは更新のみで削除はできないようなものである場合は、さらに複雑にする必要があります。

私の経験では、多くの柔軟性が必要であると言われますが、一度実装すると、誰もそれを使用しません。また、GUI が非常に複雑になり、管理が難しくなります。

GUI が複雑になる場合は、ユーザーの視点だけでなく、ストアの視点からも検討することをお勧めします。つまり、ユーザーを選択してから、ユーザーが持つアクセス許可とアクセスできるストアを選択する代わりに、最初にストアを選択してから、そのストア内のどのロールにアクセスできるユーザーを選択する方が簡単な場合があります。ユーザーの数と店舗の数によって異なります。過去のプロジェクトで、ある方法で行う方が他の方法よりもはるかに簡単であることがわかりました。

于 2009-02-20T00:50:10.683 に答える
0

store_idを表に入れuser_rolesます。

これがRailsの場合、ユーザーモデルはhave_many :stores, :through => :roles

于 2009-02-20T00:56:17.860 に答える