Php Symfony 5:@isgrated on方法注释不';无法处理继承的角色
我(显然)在找,但我的不是 这是我的情况:Php Symfony 5:@isgrated on方法注释不';无法处理继承的角色,php,symfony,security,annotations,roles,Php,Symfony,Security,Annotations,Roles,我(显然)在找,但我的不是 这是我的情况: 我创建了一个自定义角色:role\u SUPER\u ADMIN 我的实际用户是admin,他唯一的角色是role\u SUPER\u admin 角色role\u SUPER\u ADMIN继承了role\u ADMIN(见下文) 我正在尝试访问/users/page/1 我被控制器批注@isgrated([“角色\管理”、“角色\责任”])拒绝访问。 这是我的控制器: //src/Controller/UserController.php /
- 我创建了一个自定义角色:
role\u SUPER\u ADMIN
- 我的实际用户是
,他唯一的角色是admin
role\u SUPER\u admin
- 角色
继承了role\u SUPER\u ADMIN
(见下文)role\u ADMIN
- 我正在尝试访问
/users/page/1
- 我被控制器批注@isgrated([“角色\管理”、“角色\责任”])拒绝访问
。
//src/Controller/UserController.php
/**
* @Route("/users")
* @IsGranted("ROLE_USER")
*/
class UserController extends AbstractController
{
private $security;
private $mailer;
public function __construct(Security $security, MailerInterface $mailer)
{
$this->security = $security;
$this->mailer = $mailer;
}
/**
* @Route("/page/{!page}", name="user_index", requirements={"page"="\d+"}, defaults={"page":1})
* @IsGranted({"ROLE_ADMIN", "ROLE_RESPONSIBLE"})
*/
public function index(Request $request, UserRepository $userRepository, int $page = 1): Response
{
[....]
}
和我的自定义角色层次结构
config/packages/security.yaml
security:
role_hierarchy:
ROLE_RESPONSIBLE: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
我仔细检查了每一个字符,以防我输入错误,我不
我认为这就像是一个&
评估(用户必须获得角色管理和角色负责)
编辑:这就是问题所在,默认行为是对数组中的每个角色进行&
评估,我需要使用*@Security(“is_-grated('role_-ADMIN')或is_-grated('role_-RESPONSIBLE')”
我只尝试了@isgrated(“ROLE\u USER”)
,它成功了,但@isgrated(“ROLE\u ADMIN”)
没有,它是一个继承的角色
提前感谢,周一就是你知道的周一…我认为你的管理员也需要有负责的角色,因为你在@isgrated()注释中提供了一系列角色。
/**
*@Route(“/page/{!page}”,name=“user_index”,requirements={“page”=“\d+”},默认值={“page”:1})
*@isgrated({“角色管理”、“角色负责”})
*/
公共职能。。。
您要求授予用户两个角色。更改您的层次结构,使角色\超级\管理员继承角色\负责,以便您可以将其删除或将注释更改为:
/**
* @Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_RESPONSIBLE')")
*/
Isgrated(“角色超级管理员”)有效吗?答案可能有助于缩小问题的范围。是的,被授予(“允许角色切换”)
也起作用。所以我就是这么想的。。。但是我需要对symfony 4.4中的ROLE\u RESPONSIBLE
和ROLE\u ADMIN
…都有访问权限({“ROLE\u ADMIN”,“ROLE\u RESPONSIBLE”})
工作正常(ROLE\u ADMIN或ROLE\u RESPONSIBLE),但在symfony 5中它不能正常工作(RoleVoter只是跳过检查并返回拒绝访问).这是一个解决方案,但它完全违背了拥有两个独立角色的目的。。(ROLE\u RESPONSIBLE
和ROLE\u ADMIN
)您需要解释您想要实现的目标,您希望具有“ROLE\u ADMIN”和“ROLE\u RESPONSIBLE”或具有“ROLE\u ADMIN”或“ROLE\u RESPONSIBLE”(其中之一)的用户可以访问该操作。我需要:@Security(“is\u grated('ROLE\u ADMIN'))或is\u grated('ROLE\u RESPONSIBLE'))
(请参阅批准的答案)否则就没有必要让两个角色分开。这正是我需要的!或
语句。我已经向其他人找到了关于该注释的信息:自动布线时要小心,您需要导入使用Symfony\Component\Security\Core\Security作为SecurityCore代码>,因为我还需要使用Sensio\Bundle\FrameworkExtraBundle\Configuration\Security
但显然存在名称空间冲突。非常感谢!