2012-09-04 22 views
2

ACL類擁有該類所有對象的權限嗎? 或者只有權限而不是對象? 讓我在Symfony2上解釋:Symfony2:ClassACE和ObjectACE

我有一個實體訂單和5個創建的訂單。如果我授予所有者對課程權限的授權,我可以授予編輯所有對象的權限?

$objectIdentity = new ObjectIdentity('class', 'Acme\DemoBundle\Entity\Order'); 
$securityIdentity = new RoleSecurityIdentity($role->getRole()); 
$acl = $aclProvider->createAcl($objectIdentity); 
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER); 
$aclProvider->updateAcl($acl); 

編輯 其實我有2個問題:

第一個問題: 我的問題是,當我使用RoleSecurityIdentity。它不適合我。如果我使用UserSecurityIdentity完美適用於每個對象。 此示例正常工作:

foreach($orders as $order) { 
     $objectIdentity = ObjectIdentity::fromDomainObject($salesOrder); 
     $acl = $aclProvider->createAcl($objectIdentity); 
     $securityIdentity = new UserSecurityIdentity(
      'admin', 
      'Acme\CoreBundle\Entity\User'); 
     $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); 
     $aclProvider->updateAcl($acl); 
    } 

用戶管理員擁有所有者權限!

這個例子不工作:

foreach($orders as $order) { 
     $objectIdentity = ObjectIdentity::fromDomainObject($salesOrder); 
     $acl = $aclProvider->createAcl($objectIdentity); 
     $securityIdentity = new RoleSecurityIdentity('ROLE_ADMIN'); 
     $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); 
     $aclProvider->updateAcl($acl); 
    } 

與ROLE_ADMIN用戶不必補助的對象!

第二個問題: 如果我申請人授予給類訂單我沒有授予訪問實體:讓我來解釋:

$objectIdentity = new ObjectIdentity('class', 'Neventum\PaymentBundle\Entity\SalesOrder'); 
    $acl = $aclProvider->createAcl($objectIdentity); 
    $securityIdentity = UserSecurityIdentity::fromAccount($admin); 
    $acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER); 
    $aclProvider->updateAcl($acl); 

我需要的管理員用戶始終可以訪問訂單實體的所有對象。

+0

對於第一個問題:是你的角色來自哪裏數據庫(例如:你有一個角色實體不同於Symfony \ Component \ Security \ Core \ Role)? – GergelyPolonkai

+0

是的!我的角色來自數據庫。我有實體類Role實現RoleInterface – Mauro

回答

3

我修好了!

問題出在用戶實體上的getRoles方法。

之前,它是這樣的:

function getRoles() { 
    return $this->roles->toArray(); 
} 

我已經改爲:

function getRoles() 
{ 
    $roles = array(); 
    foreach($this->userRoles as $userRole) { 
     $roles[] = $userRole->getRole(); 
    } 
    return $roles; 
} 

如果有人知道我爲什麼會喜歡