Класс ACL имеет разрешения для всех объектов этого класса? Или иметь только разрешение на себя, а не на объекты? Позвольте мне объяснить на Symfony2:
У меня есть Entity Order и 5 Созданных Заказов. Если я дам разрешение владельца классу Order, у меня есть гранты для редактирования всех объектов?
$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);
EDIT На самом деле у меня есть 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); }
У пользователя Admin есть гранты OWNER!
этот пример не работает:
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 не имеют грантов для объектов!
ВТОРАЯ ПРОБЛЕМА: Если я применяю гранты OWNER к классу, у меня нет грантов на доступ к объектам: позвольте мне объяснить:
$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);
Мне нужен пользователь admin всегда имеет доступ ко всем объектам объекта Order.
Я исправил!
Проблема заключалась в методе getRoles для User Entity.
Прежде чем это было так:
function getRoles() { return $this->roles->toArray(); }
Я изменил на:
function getRoles() { $roles = array(); foreach($this->userRoles as $userRole) { $roles[] = $userRole->getRole(); } return $roles; }
Если кто-нибудь знает, почему я буду признателен