2

新しい UserGroup が生成されたら、新しい RoleSecurityIdentity と ROLE を作成します。お気に入り:

new RoleSecurityIdentity('ROLE_GROUP-'.$groupName);

管理者がメディアなどの新しいオブジェクトを作成する場合、管理者はグループをメディアに割り当てて表示できます。

$acl->insertObjectAce($groupSecurityIdentity, MaskBuilder::MASK_VIEW);

グループを削除した場合、RoleSecurityIdentity のすべてのエースを取り消す方法がわからないという問題があります。

用意されている機能などはありますか?まだ見つけられなかったので、これをコーディングしました:

 $connection = $this->getDoctrine()->getManager()->getConnection();
 // find securityIdentity ID
 $secIdSearch = $connection->prepare('select * from acl_security_identities where identifier = "'.$groupRole.'"');
 $secIdSearch->execute();
 $secIdFetch = $secIdSearch->fetch();
 $securityIdentitiyId = $secIdFetch['id'];

 if($securityIdentitiyId):
      // Delete all connected Object Entities for this RoleIdentitiys
  $connection->prepare('DELETE FROM acl_entries where security_identity_id ='.$securityIdentitiyId)->execute();
      // Remove the Role Identitiy itself. 
  $connection->prepare('DELETE FROM acl_security_identities where id ='.$securityIdentitiyId)->execute();
 endif;

本当に汚れているように見えるだけでなく、Ace を削除したオブジェクトに新しい ACL を保存したい場合、

 Notice: Undefined offset: 6 in  /../../Acl/Dbal/MutableAclProvider.php line 842

ace_order が正しくないためです。

すでに解決策はありますか?それとも、自分のやり方でエースを再注文する必要がありますか?

4

1 に答える 1

0

これをテストします:

public function myDeleteAce($securityIdentity, $acl,$entity){
    foreach($acl->getObjectAces() as $index => $ace) {

        if($securityIdentity->equals($ace->getSecurityIdentity())) {
                if (count($acl->getObjectAces())== 1){
                    $objectIdentity = ObjectIdentity::fromDomainObject($entity);
                    $this->provider->deleteAcl($objectIdentity);
                    $response = ('No more ACE, So ACL deleted');
                }else{
                    $acl->deleteObjectAce($index);
                    $this->provider->updateAcl($acl);
                    $response = ('Rights deleted !');
                }



        }  



            }
    return $response;
}

これがお役に立てば幸いです

于 2014-01-02T13:33:54.657 に答える