Symfony2 - 自定义角色

时间:2014-11-12 10:25:24

标签: symfony roles

我正在尝试将自定义角色设置为我的security.yml,因此登录后用户可以或无法访问主页面(我使用ActiveDirectory)。

我想要的只是创建一个角色:ROLE_GUEST

这是我的security.yml文件:

role_hierarchy:
    ROLE_GUEST:       ROLE_GUEST
    ROLE_USER:        [ROLE_GUEST, ROLE_USER]
    ROLE_ADMIN:       [ROLE_GUEST, ROLE_USER, ROLE_ADMIN]
    ROLE_SUPER_ADMIN: [ROLE_GUEST, ROLE_USER, ROLE_ADMIN, ROLE_SUPER_ADMIN]

如果我理解得很好,这就是我阅读这些角色的方式:

  • 具有角色' ROLE_GUEST'只能看到需要' ROLE_GUEST'
  • 的页面
  • 具有角色' ROLE_USER'的用户也可能会看到任何需要' ROLE_GUEST'
  • 的网页
  • "具有角色' ROLE_ADMIN'也可能会看到任何需要“ROLE_GUEST'和' ROLE_USER'"
  • 等...

然后,我将access_control设置如下:

access_control:
    - { path: ^/$, role: ROLE_USER }

我在access_control中想要的是将主页的访问权限限制为仅ROLE_USER。当用户第一次登录时,我已将默认角色设置为ROLE_GUEST。但即使我像上面那样放置ROLE_USER,我也可以使用拥有ROLE_GUEST的用户访问主页面。

知道如何让这个工作吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您的正则表达似乎是问题,^/$只匹配一个/而没有其他内容。这就是我的意思:

access_control:
    - { path: ^/.*, role: ROLE_USER }

您的角色层次结构也可以简化:

role_hierarchy:
    ROLE_USER:        [ROLE_GUEST] # ROLE_USER implies ROLE_GUEST
    ROLE_ADMIN:       [ROLE_USER] # ROLE_ADMIN implies ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_ADMIN] # and so on ...

来自文档的这个页面非常有助于理解安全选民背后的概念: http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

在symfony 2.6中,简化了自定义选民的编写:http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters

有关于knpuniversities youtube频道的视频介绍: https://www.youtube.com/watch?v=fF8tpdlnyaE

答案 1 :(得分:1)

好吧我明白了。

显然,FOS用户捆绑包会自动添加ROLE" USER"对于每个用户,即使您在用户实体中没有这样说(您可以在分析器上查看)。

因此,假设您需要一个自定义ROLE,请记住ROLE_USER将始终是较低的ROLE,因为每个人都会拥有它。

如果我错了,请纠正我!

哦,我还纠正了我的防火墙和access_control(如果它可以帮助某人):

角色层次结构设置:

role_hierarchy:
        ROLE_CUSTOM:     [ROLE_USER]
        ROLE_ADMIN:       [ROLE_CUSTOM]
        ROLE_SUPER_ADMIN: [ROLE_ADMIN]

防火墙设置:

firewalls:
        main:
            pattern: ^/

访问控制设置:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, role: ROLE_ADMIN }
    - { path: ^/, role: ROLE_CUSTOM } // IMPORTANT TO BE THE LAST ONE