0

解決

そうですね、少し古いSymfony2リリース(2.0-RC6)を使用すると、それが得られます。にバグがあったようです__construct( 2010RoleSecurityIdentity年12月に報告)。

代わりinstance of Roleinstance of RoleInstance

私はおそらくこの質問を閉じる必要があります...


私は全体ACLの概念にかなりSymfony2慣れていませんが、その背後にある基本を理解しています。昨夜、私は次のシナリオを機能させようとしていました。

2つのユーザーロール(ROLE_GROUP1、 )があり、これらのグループの1つにオブジェクトレベルROLE_GROUP2を設定したいと思います。のユーザーがログインしている場合は、この役割をに配置する必要があります。それ以外の場合は、を配置する必要があります。 ACLROLE_GROUP1ACEROLE_GROUP2

これまでのところ、私はこのコードを書きました(実際には公式のドキュメントとほとんど同じです):

$role = $this->getRole(); // returns ROLE_GROUP1 role object

$acl_provider = $this->get('security.acl.provider');

$objIdentity = ObjectIdentity::fromDomainObject($object); // my object

$acl = $acl_provider->createAcl($objIdentity);

$securityIdentity = new RoleSecurityIdentity($role->getRole()); // Role based identity

$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER);
$acl_provider->updateAcl($acl);

私の理解では、これにより、ROLE_GROUP1役割を持つユーザーにすべてのアクセス許可が付与されます。私が間違っている?

権限を確認するために、私はこのコードを使用しました(これも公式ドキュメントから):

$context = $this->get('security.context');

if ( false === $context->isGranted("EDIT", $object) ){
    throw new AccessDeniedException();
}

...しかし、常に失敗します(つまり、例外がスローされます)。

ACLテーブルを調べたところ、私が見る限り、すべてが正常に見えました。

RoleSecurityIdentityで何か問題がありますか?このシナリオを達成する方法はありますか?

どんな助けでも大歓迎です!

編集

symfonyのコードをドリルダウンしたところ、のequalsメソッドでパーミッションの付与が失敗することがわかりましたRoleSecurityIdentity

if (!$sid instanceof RoleSecurityIdentity) {
    return false;
}

/** I ADDED THIS IF CHECK TO SEE WHAT DOES IT COMPARE WITH **/
if ( $this->role->getName() == "ROLE_GROUP1" ){
    die("<pre>" . print_r($sid->getRole(),1) . "</pre><pre>" . print_r($this->role,1) . "</pre><pre>" . print_r($this->role === $sid->getRole(),1) . "</pre>");
}

return $this->role === $sid->getRole();

がROLE_GROUP1ロールのオブジェクトであるのに対し、それ$sid->getRole()stringROLE_GROUP1」であることがわかります。$this->roleRole

4

1 に答える 1

0

この質問を解決済みとしてマークするだけです。


解決:

そうですね、少し古いSymfony2リリース(2.0-RC6)を使用すると、それが得られます。RoleSecurityIdentityの__constructにバグがあったようです(2010年12月に報告されました)。

Roleのインスタンスではなく、RoleInstanceのインスタンスである必要があります。

私はおそらくこの質問を閉じる必要があります...

于 2012-09-26T21:13:04.833 に答える