如果我还使用 "security.yaml" 配置安全性,为什么“@IsGranted”注释不起作用?
Why does the "@IsGranted" annotation does not work if I also configure security using "security.yaml"?
我有一个controller,我用@IsGranted(IS_AUTHENTICATED_ANONYMOUSLY)
注解允许所有用户访问,我还有一个security.yaml
.
但是我的注解好像不起作用。
控制器
/**
* @Route("/example",name="app_example")
* @IsGranted("IS_AUTHENTICATED_ANONYMOUSLY")
*/
public function example(): RedirectResponse
{
/// omit
}
security.yaml
access_control:
- { path: ^/, roles: ROLE_ADMIN }
当我访问 /example
时,系统要求我登录。
我知道我可以通过将 IS_AUTHENTICATED_ANONYMOUSLY
移动到 security.yaml
来管理,但我想知道如何使用注释。
@IsGranted()
(来自 SensioFrameworkExtraBundle)在 Symfony 安全访问控制 之后的事件上被检查。
由于您的配置相互矛盾(您的主要安全配置要求对 所有 路由进行身份验证,而您控制器上的注释只是说“此路由不进行身份验证”),主要安全配置“wins”。
如果你想在配置文件和中同时使用安全配置作为注解,配置不能重叠和相互矛盾。
如果它们发生冲突,为了使 @IsGranted()
注释起作用,它们可以 比主要安全配置更严格,但不会 更开放.
我有一个controller,我用@IsGranted(IS_AUTHENTICATED_ANONYMOUSLY)
注解允许所有用户访问,我还有一个security.yaml
.
但是我的注解好像不起作用。
控制器
/**
* @Route("/example",name="app_example")
* @IsGranted("IS_AUTHENTICATED_ANONYMOUSLY")
*/
public function example(): RedirectResponse
{
/// omit
}
security.yaml
access_control:
- { path: ^/, roles: ROLE_ADMIN }
当我访问 /example
时,系统要求我登录。
我知道我可以通过将 IS_AUTHENTICATED_ANONYMOUSLY
移动到 security.yaml
来管理,但我想知道如何使用注释。
@IsGranted()
(来自 SensioFrameworkExtraBundle)在 Symfony 安全访问控制 之后的事件上被检查。
由于您的配置相互矛盾(您的主要安全配置要求对 所有 路由进行身份验证,而您控制器上的注释只是说“此路由不进行身份验证”),主要安全配置“wins”。
如果你想在配置文件和中同时使用安全配置作为注解,配置不能重叠和相互矛盾。
如果它们发生冲突,为了使 @IsGranted()
注释起作用,它们可以 比主要安全配置更严格,但不会 更开放.