在我的访问控制中,我有一堆规则,但它们似乎都没有工作。我属于一个没有角色的团队,我仍然可以访问所有路线。我尝试在路径的末尾添加美元符号,但这不起作用。我也尝试重新排序路径,但也失败了。任何建议都会有所帮助!
这是我的security.yml文件
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
access_control:
- { path: ^/system/staff/add, roles: ROLE_ADD_STAFF }
- { path: ^/system/staff/edit, roles: ROLE_EDIT_STAFF }
- { path: ^/system/staff, roles: ROLE_VIEW_STAFF }
- { path: ^/system/profile/edit, roles: ROLE_USER }
- { path: ^/system/profile, roles: ROLE_USER }
- { path: ^/system/officer/add, roles: ROLE_ADD_OFFICER }
- { path: ^/system/officer/edit, roles: ROLE_EDIT_OFFICER }
- { path: ^/system/officer, roles: ROLE_VIEW_OFFICER }
- { path: ^/system/job/add, roles: ROLE_ADD_JOBS }
- { path: ^/system/job/edit, roles: ROLE_EDIT_JOBS }
- { path: ^/system/job, roles: ROLE_VIEW_JOBS }
- { path: ^/system/company/add, roles: ROLE_ADD_COMPANIES }
- { path: ^/system/company/edit, roles: ROLE_EDIT_COMPANIES }
- { path: ^/system/company, role: ROLE_VIEW_COMPANIES }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/system, roles: ROLE_USER }
例如我当前的群组没有ROLE_EDIT_STAFF
角色,但我仍然可以访问该路径。
答案 0 :(得分:3)
每次发出请求时,symfony都会检查您的访问控制以找到有效的访问控制。
当您请求/system/staff/edit
时,会发生什么。
对于您的设置,它会找到:
- { path: ^/system/staff/edit, roles: ROLE_EDIT_STAFF }
但是因为你没有角色ROLE_EDIT_STAFF
,所以它继续前进。
现在匹配:
- { path: ^/system/staff, roles: ROLE_VIEW_STAFF }
因为您的路线确实以^ / system / staff开头。您拥有ROLE_VIEW_STAFF
,因此您可以获得访问权限。
除此之外你还有:
- { path: ^/system, roles: ROLE_USER }
这意味着拥有ROLE_USER
的任何人都可以访问以/system
开头的任何路线。
/system/admin/delete-all
仅/system
是否与它们相匹配。
如果你想使用严格的路由控制,我建议你从路由的开头删除^
,除非你真的想要匹配从^
后面开始的任何路由。