我(显然)搜索了类似的问题,但我都不是。
这是我的情况:
ROLE_SUPER_ADMIN
admin
,他唯一的角色是ROLE_SUPER_ADMIN
ROLE_SUPER_ADMIN
继承了ROLE_ADMIN
(请参见下文)/users/page/1
Access Denied by controller annotation @IsGranted(["ROLE_ADMIN", "ROLE_RESPONSIBLE"])
这是我的控制器:
//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]
我仔细检查了每个字符,以防万一我有错字,我没有...
我认为这就像一次&&
评估(用户必须获得ROLE_ADMIN
和 ROLE_RESPONSIBLE
)。
编辑:那就是问题,默认行为是&&
对数组中每个角色的评估,我需要使用* @Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_RESPONSIBLE')")
我仅尝试使用@IsGranted("ROLE_USER")
,它起作用了,但@IsGranted("ROLE_ADMIN")
没有起作用,这是一个继承的角色
我(仍然)无法嵌入图片,因此请相信我的意思或在此处查看我的证明
在此先感谢您,星期一是您知道的星期一...
您要求授予用户两个角色。更改层次结构以使ROLE_SUPER_ADMIN继承ROLE_RESPONSIBLE,因此您可以将其删除或将注释更改为:
/**
* @Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_RESPONSIBLE')")
*/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句