У меня есть проблема с ACL,:Symfony2: ACL, роль и ClassScope
я использую рамки класса для предоставления разрешений на роли.
Это мой код, чтобы объявить ClassAce:
$objectIdentity = new \Symfony\Component\Security\Acl\Domain\ObjectIdentity('class', 'Complete\\Class\\Name');
try
{
$acl = $aclProvider->findAcl($objectIdentity);
}
catch (\Symfony\Component\Security\Acl\Exception\Exception $e)
{
$acl = $aclProvider->createAcl($objectIdentity);
}
// retrieving the security identity of the currently role
$securityIdentity = new \Symfony\Component\Security\Acl\Domain\RoleSecurityIdentity($role);
// grant owner access
$acl->insertClassAce($securityIdentity, \Symfony\Component\Security\Acl\Permission\MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
И это мой код, чтобы проверить доступ:
$securityContext = $this->get('security.context');
$oid = new \Symfony\Component\Security\Acl\Domain\ObjectIdentity('class', 'Complete\\Class\\Name');
if (false === $securityContext->isGranted('EDIT', $oid))
{
throw new \Symfony\Component\Security\Core\Exception\AccessDeniedException();
}
я получаю AccessDeniedExeption, с сообщением в журналах: «Нет ACL найден для идентификации объекта. Голосование, чтобы запретить доступ. "
я могу решить эту проблему путем изменения функции Равных в
исходной функции RoleSecurityIdentity является
public function equals(SecurityIdentityInterface $sid)
{
if (!$sid instanceof RoleSecurityIdentity) {
return false;
}
return $this->role === $sid->getRole();
}
Но если я изменить его
public function equals(SecurityIdentityInterface $sid)
{
if (!$sid instanceof RoleSecurityIdentity) {
return false;
}
return $this->role == $sid->getRole();
}
Он работает ...
Я использую свой собственный класс ролей, может ли это быть прообразом m?
Спасибо за ответы,
Привет @anithaly - это класс ролей класса сущности doctrine? Я имею в виду, что вы сохраняете свои роли в своей базе данных? У меня такая же проблема, но я все равно попытаюсь сохранить свои роли в базе данных, но я буду абрикован, если вы можете мне помочь. – metalvarez
Я думаю, что нашел ответ на свой вопрос, в документации по symfony объясняется, как сохранять роли в базе данных, а также объясняет, что вам нужно расширить Symfony \ Component \ Security \ Core \ Role \ Role, вот ссылка [Управление ролями в базе данных] (http://symfony.com/doc/current/cookbook/security/entity_provider.html#managing-roles-in-the-database) – metalvarez