Symfony ACL为用户分配ROLE并检查是否已授予

时间:2017-06-13 21:50:38

标签: symfony permissions acl roles

在Symfony文档中,我们可以阅读如何检查用户是否具有特定的ROLe,这可以通过以下方式轻松完成:

if ($this->decisionManager->decide($token, array('ROLE_ADMIN'))) {
        return true;
    }

但是文档没有描述我们如何向特定用户授予ROLE_ADMIN,以便上面的代码可以工作,因为docs中的大多数示例都显示在某个特定对象/类上授予了ROLE:

 $aclProvider = $this->getContainer()->get('security.acl.provider');

// Use class for object identity as below
$oid = new ObjectIdentity('acme_post', 'Your\\AcmeBundle\\Entity\\Post');

$acl = $aclProvider->createAcl($oid);

$securityIdentity = new RoleSecurityIdentity("ROLE_ADMIN");
// grant owner access to users with above role
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);

在此示例中,第一个代码段不起作用,除非我们使用

$this->decisionManager->decide($token, array('ROLE_ADMIN'),$entityPost)

我不需要知道他是否具有特定对象/类的权限/角色,但是如果他具有一般角色,例如

$user->getRoles();

返回用户拥有的所有角色,但isGranted('ROLE_ADMIN')不起作用,即使上面的代码返回带有ROLE_ADMIN的数组。

0 个答案:

没有答案