Symfony roleHierarchy和控制器安全性注释

时间:2016-10-11 20:47:58

标签: symfony

我的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的用户访问我的办公室路线。

谢谢。

3 个答案:

答案 0 :(得分:2)

定义新角色时,您将定义角色从哪个现有角色继承。你在这里的定义是错误的。

  1. 您不必定义ROLE_USER,一旦扩展它就会被定义。 (感谢@Yonel)
  2. 正如我上面提到的,新角色应该扩展现有角色:

    role_hierarchy:
        ROLE_OFFICE: ROLE_USER  
        ...
    

    ROLE_OFFICE也会有ROLE_USER

  3. 您的ROLE_TEST现在也ROLE_OFFICE,这意味着ROLE_TEST可以访问路线/办公室。要解决此问题,您必须从定义中删除ROLE_OFFICE

  4. 这应该是有效的定义:

    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')")
 */

希望这个帮助