Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 5:@isgrated on方法注释不';无法处理继承的角色_Php_Symfony_Security_Annotations_Roles - Fatal编程技术网

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
但显然存在名称空间冲突。非常感谢!