我的security.yml配置文件中定义了一个角色层次结构:
role hierarchy:
ROLE_USER: [ROLE_USER]
ROLE_OFFICE: [ROLE_OFFICE]
ROLE_TEST: [ROLE_OFFICE, ROLE_USER]
我想在我的控制器中使用安全注释:
/**
* @Route("/office", name="office")
* @Security("has_role('ROLE_OFFICE')")
*/
如何将角色层次结构与注释一起使用。在我的示例中,将不允许具有ROLE_TEST的用户访问我的办公室路线。
谢谢。
答案 0 :(得分:2)
定义新角色时,您将定义角色从哪个现有角色继承。你在这里的定义是错误的。
ROLE_USER
,一旦扩展它就会被定义。 (感谢@Yonel)正如我上面提到的,新角色应该扩展现有角色:
role_hierarchy:
ROLE_OFFICE: ROLE_USER
...
ROLE_OFFICE
也会有ROLE_USER
您的ROLE_TEST
现在也ROLE_OFFICE
,这意味着ROLE_TEST
可以访问路线/办公室。要解决此问题,您必须从定义中删除ROLE_OFFICE
。
这应该是有效的定义:
role_hierarchy:
ROLE_OFFICE: ROLE_USER
ROLE_TEST: ROLE_USER
文档:http://symfony.com/doc/current/security.html#hierarchical-roles
答案 1 :(得分:0)
如果您通过以下方式更改注释:
@Security("is_granted('ROLE_OFFICE')")
ROLE_TEST是否访问资源?
答案 2 :(得分:0)
如果要排除指向特定角色的路线,可以否定条件。例如:
/**
* @Route("/office", name="office")
* @Security("not has_role('ROLE_TEST')")
*/
希望这个帮助