gpt4 book ai didi

SYMFONY2 : ACL, 角色和类作用域

转载 作者:行者123 更新时间:2023-12-01 11:02:54 26 4
gpt4 key购买 nike

我对 ACL 有疑问:

我使用类作用域来授予角色权限。

这是我声明 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。投票拒绝访问。”

我可以通过改变 equals 函数来解决这个问题角色安全身份

原函数是

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();
}

有效...

我使用自己的角色类,会不会有问题?

感谢您的回答,

最佳答案

我遇到了类似的问题。在我自己的 Role 类中扩展 Symfony\Component\Security\Core\Role\Role 解决了这个问题。

use Symfony\Component\Security\Core\Role\Role as CoreRole;

class Role extends CoreRole{ // or extends CoreRole implements RoleInterface
// my custom Role class
}

在equal函数中找出什么类型的值正在检查,它必须是字符串,而不是对象。在我的例子中,它是角色对象。

关于SYMFONY2 : ACL, 角色和类作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com