我正在尝试将自定义角色设置为我的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]
如果我理解得很好,这就是我阅读这些角色的方式:
然后,我将access_control设置如下:
access_control:
- { path: ^/$, role: ROLE_USER }
我在access_control中想要的是将主页的访问权限限制为仅ROLE_USER。当用户第一次登录时,我已将默认角色设置为ROLE_GUEST。但即使我像上面那样放置ROLE_USER,我也可以使用拥有ROLE_GUEST的用户访问主页面。
知道如何让这个工作吗?
谢谢!
答案 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