0

アクセス制御リストを使用して、Symfony2 でアクセス制御をモデル化したいと考えています。ユーザーには、クラス スコープ アクセスを許可するさまざまなロールがありますが、オブジェクト スコープ アクセスも許可されます。デフォルトの例: admin ロールはすべてのコメントを編集でき、ユーザーは自分のコメントを編集できます。

問題はパーミッションのチェックです。現時点では、クラスまたはオブジェクト スコープのいずれかのみがチェックされます。

$securityContext->isGranted('EDIT', $identity)

identityどちらかはどこですか

new ObjectIdentity('class', 'Acme\\BlogBundle\\Document\\Comment')

またはcommentオブジェクト自体。

commentオブジェクトが明らかに独自のクラスを提供するという事実に基づいて、有権者はクラス スコープとオブジェクト スコープ アクセスの両方をチェックすると思いました。では、これを実装するにはどうすればよいでしょうか。カスタム有権者を作成しますか? それとも、何か他のものを完全に見逃していますか?

e: ドキュメントには次のように書かれています: 「PermissionGrantingStrategy は最初にすべてのオブジェクト スコープの ACE をチェックし、該当するものがない場合、クラス スコープの ACE がチェックされます」: http://symfony.com/doc/current/cookbook/security/acl_advanced. html

つまり、オブジェクトスコープがある場合、クラススコープはまったく考慮されないということです。:(

4

1 に答える 1

2

さて、クラススコープを作成して、使用する必要がありました

$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);

それ以外の->insertObjectAce(...

これにより、標準の MySQL 実装で機能しますが、IamPersistent/MongoDBAclBundle にはバグがあり、acl_entry とクラス スコープ acl_oid の間にリンクがないため、投票中にクラス スコープが $acl に表示されません。

于 2012-12-06T13:26:00.917 に答える