在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的数组。