我有一个带有前端和后端的应用程序。两者共享相同的 FOSUserBundle 用户表。我正在处理的应用程序背后的逻辑不允许"admin"(ROLE_ADMIN
或组ADMIN
)在前端登录,因此无论用户属于组ADMIN
还是具有ROLE_SUPERADMIN
或ROLE_ADMIN
凭据,我都需要了解登录流程。我认为这可以以某种方式在 Symfony2 本身的安全流上完成,但是如何完成呢?我需要做什么来捕获它,如果用户属于重定向到登录表单(从 FOSUserBundle)或允许它进入前端?有什么帮助吗?一些代码?例子?
security.yml
文件内容:
关于用户答案,这是我security.yml
文件的配置方式:
role_hierarchy:
ROLE_USER: ROLE_USER
ROLE_ADMIN: ROLE_ADMIN
access_control:
# Anonymous area
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cedula, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/rif, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/usuario, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/razon_social, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro_mercantil, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/padre, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo_alternativo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/paises, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/estados, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ciudades, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/municipios, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/parroquias, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/empresas, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Secured area
- { path: ^/, role: ROLE_USER }
- { path: ^/admin, role: ROLE_ADMIN }
但是有ROLE_ADMIN
的用户仍然可以在前端登录(/
),他们不应该对吗?那怎么了呢?
您必须知道 security.yml 文件中的角色层次结构。
你不需要扩展fosuserbundle或symfony安全性上的默认功能来实现这一点。
例如:
role_hierarchy:
ROLE_USER: ROLE USER
ROLE_CONTENT_MANAGER: ROLE_USER
ROLE_ADMIN: [ROLE_CONTENT_MANAGER]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
因此,超级管理员可以去所有其他允许的团体。管理员,具有内容管理员的权限。内容管理员拥有用户权限。
检查 security.yml 文件中的访问控制。
access_control:
- { path: ^/private_directory$, roles: MUST_BE_RIGHT_TO_SEE_HERE }
所以,角色MUST_BE_RIGHT_TO_SEE_HERE只能看到private_directory。任何其他角色都不能。