首页 > 解决方案 > Symfony isGranted("ROLE_ADMIN") 无法正常工作

问题描述

我有一个这样的security.yaml:


        api_documentary:
            pattern:    ^/api/v1/documentary
            fos_oauth:  true
            stateless:  false
            methods: [POST, PUT, DELETE]

        - { path: ^/api/v1/documentary, roles: IS_AUTHENTICATED_ANONYMOUSLY }

我希望防火墙在以下路由上打开(通过访问令牌访问)^/api/v1/documentary POST, PUT, DELETE

我希望防火墙在路由上关闭:GETGET ALL

如果我从上面排除 GET methods: [],我可以公开访问它们,但是会发生一些奇怪的事情:

isGranted 不起作用,即使用户具有以下角色 [ROLE_USER, ROLE_ADMIN] 它似乎没有注意到。

if (!$this->isGranted('ROLE_ADMIN')) {
            return new JsonResponse("Not granted");
        }

如果我添加到api_documentary:

methods: [GET, POST, PUT, DELETE]

isGranted有效,但该GET方法将不再公开。

标签: phpsymfonysymfony4fosoauthserverbundle

解决方案


推荐阅读