1


アプリケーションに、カテゴリ別にデータを公開する必要があるユーザーがいます。
例:
ROLE_CAMPAIGN を持つユーザー A は WHEREキャンペーン_category_id = 5のみ
を表示できます ROLE_CAMPAIGN を持つユーザー b は WHEREキャンペーン_category_id のみを表示できます IN(5,10,4)
(選択、挿入、更新、削除)

ユーザーとキャンペーンは休止状態のエンティティです。
それらの接続は ManyToMany です (ユーザーは CampaignsCategories を持っています)それをネイティブSQL
に変換すると

SELECT * FROM CAMPAIGNS WHERE CATEGORY_ID IN (SELECT ID FROM USER_CATEGORIES)

と何度も。

何らかの役割を持つユーザーに動的に実装する正しい方法は何ですか。

少しの例が役立ちます。

(スプリングセキュリティ3)

4

4 に答える 4

2

この問題を解決するためにアクセス制御リスト (ACL) を使用できるようです: 2 人の従業員が同じ ROLE_EMPLOYEE を持っており、管理者ができることを行うことはできませんが、その境界内では互いのレコードを表示または削除することはできません。
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.htmlより良いアイデアが得られるはずです。

于 2011-03-12T21:42:56.830 に答える
2

セキュリティ モデルの欠点に対する技術的な解決策を探しています。

同じロールのユーザーは同じアクセス権を持つ必要があります。

セキュリティの決定がこの条件に従っていないことがわかった場合は、ロールを再定義してより細かくする必要があります。

于 2011-03-12T17:48:20.390 に答える
0

役割はあなたが探している答えではありません。エマニュエルが述べたように、アクセス制御リストは問題の解決策です。ロールを使用するように構成された Spring セキュリティは、同じロールを持つ 2 人のユーザーをネイティブに区別できません。

于 2011-03-13T13:42:52.060 に答える
0

通常、RBAC は、管理対象のエンティティごとに異なるアクセス許可を与えることはできません。RBAC は 2 次元です - アクセス権 X ROLE。通常、どのコンテンツが制御されているかをテストするメカニズムはありません。おそらくこれには RBAC を使用できますが、それを行うには多くの ROLES が必要であり、いくつかのカスタマイズが必要であり、とにかく ACL を作成することになります。

一方、ACL は本質的に 3 次元です。パーミッション X ROLES X オブジェクトはすべて、完全なセットまたは部分的なセットで相互に定義できます。

パーミッション X ROLE X オブジェクト (完全な ACL) パーミッション X ROLE (RBAC) ROLE X オブジェクト (役に立つ?) パーミッション X オブジェクト (役に立つ?)

ACL と RBAC の両方で、人々に異なる役割を割り当てることができます。ほとんどの RBAC では、他の方法でアクセス許可を割り当てることはできません。

ただし、多くの ACL には、特定のオブジェクト/エンティティに関して権限を直接人に割り当てる機能があります。これが ACL の cpability である場合、複雑さが大幅に増加し、速度が低下しますが、大幅な柔軟性が追加されます。1 人のユーザー専用の ROLE を作成する方がはるかに優れています。そのため、人々に権限を直接割り当ててそこに行かないでください。

あなたの問題は、ほとんどの場合、ROLES のタイプを区別していないことですが、とにかく RBAC はそれを行いません。ACL を使用する必要があります。パーミッションと ROLE、ROLE とオブジェクトの表形式の表示を設定できれば、より長く理解を深めることができます。

ほとんどの優れた ACL が持つもう 1 つの要素は、オブジェクトのグループです。これは、権限の一括または「随時」割り当てを行うために必要なことです。キャンペーンの作成コードは、カテゴリ別にグループを事前に割り当てます。その後、ROLES と権限が自然に発生します。

于 2012-05-28T14:52:23.820 に答える