2017-04-25 12 views
0

私は自分のプロジェクトにデフォルトのACLシステムより細かく調整された独自のカスタムACLシステムをSpringセキュリティで公開しようとしています。Spring SecurityのACL(アクセス制御リスト)は、OBJECT_IDENTITYごとに複数のアクセス権を持つプリンシパルをどのように処理しますか?

Spring SecurityのデフォルトのACL実装は、ドメインオブジェクト(OBJECT_IDENTITY)ごとに複数のアクセス権を持つ単一のプリンシパルオブジェクト(SID)をデータベースに混乱させることなくどのように扱いますか?

ドキュメントの状態:

"ACL_ENTRY stores the individual permissions assigned to each recipient. Columns include a foreign key to the ACL_OBJECT_IDENTITY, the recipient (ie a foreign key to ACL_SID), whether we'll be auditing or not, and the integer bit mask that represents the actual permission being granted or denied. We have a single row for every recipient that receives a permission to work with a domain object."だからACL_Entryは、基本的に単一の主ユーザとの間の結合テーブル、およびユーザがアクセス許可を持っていること単一ドメインオブジェクトです。

Fine。しかしながら;コントローラーレイヤーには、単一のオブジェクトに対して実行できる複数のCRUDメソッドがあります。あるユーザーがオブジェクトを更新したり削除したりする権限を持っていて、別のユーザーがオブジェクトを作成して読み取る権限しか持たない場合はどうなりますか?プリンシパルユーザーとドメインオブジェクトの間で、ETERNUS EVEYアクセス許可の既定のSpring ACLシステムがデータベースに行を格納していますか?たとえば、Joeはこのオブジェクトを読み取る権限を持っています。 Row + = 1. Joeにもこのオブジェクトを書き込む権限があります。行+ = 1など。

オブジェクトごとに、プリンシパルごとに複数のアクセス許可を追加することに懸念があったため、カスタムロールアウトを実装する方がはるかに簡単になりました(1人のプリンシパルが読み込みを取得する方法オブジェクトあたりのアクセス許可を更新します(ユーザーあたり3行).300人のユーザーと900行を取得し、これがどのように指数関数的な問題になるかを確認できます。

もしそうでなければ、どのように動作しますか?ありがとう。

答えて

0

各々に対するデータベースおよび主要ユーザおよびドメイン オブジェクト間のすべての許可にデフォルトスプリングACLシステムストア行していますか?

はい。

一方、アクセス許可には1ビット(オンまたはオフ)が必要で、Permissionインターフェイスには、複数のアクセス許可を1つの整数に組み合わせるためのgetMask()メソッドもあります。したがって、sid /ユーザーおよびドメインオブジェクトただし、の場合、Spring Securityの組み込みACL許可エバリュエーターは、曖昧になりますが、ではなく、はそのようなビットマスクを処理しますが、許可するたびに別々の行が必要です。 編集:この制限事項は、発行レポートSEC-2342に記載されています。

アクセス許可を格納する行が多数あることに関する懸念事項:セキュリティID(sid)は単一のユーザーである必要はなく、グループでもかまいません。多数のユーザーがいる場合は、ユーザーをグループに割り当て、グループのアクセス許可を設定します。

+0

この情報をありがとうございました。私はいくつかの点について少し深く掘り下げたいと思います。 1)本当か偽か:組み込みの評価者はそのような組み込みのマスクを扱うことができず、すべての許可のために別々の行が必要です。したがって、すべての実用性において、デフォルトのACLを使用すると、単一のアクセス権ごとに新しい単一の行が作成される必要があります。つまり、行1のユーザー1に対する読み取り権限の行。 ? –

+1

@TylerDurden True(前回チェックした時点)。 – holmis83

+0

そして2)グループはここで '役割'とは違うのですか?私のカスタム実装では、私は次のようなことをすることを考えていました。読み込み、書き込み、更新などの代わりに、私はdog_ownerとvet_medicのような役割を果たすカスタムのパーミッションを持っています。私の結合テーブルは、単一の主体ユーザーと単一のドメインオブジェクトを結合し、上記の「アクセス許可」の1つを含みます。これらの「パーミッション」には、本質的に、更新、読み取り、削除などの許容量があります。コントローラメソッドのチェックで、@ preAuthorization式はdog_ownerまたはvet_medicをチェックします。 I.更新にはvet_medicが必要です –

関連する問題