我有一个前端和后端应用程序。两者共享相同的FOSUserBundle用户表。我正在处理的应用程序背后的逻辑不允许“admin”(ROLE_ADMIN
或组ADMIN
)在前端登录,所以我需要抓住登录流程,无论用户属于小组ADMIN
或拥有ROLE_SUPERADMIN
或ROLE_ADMIN
个凭据。我认为这可以在Symfony2本身的Security流程中完成,但是如何?我需要做些什么来捕获它,如果用户属于重定向到登录表单(来自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
的用户仍然可以在前端(/
)登录,他们应该不对吗?那怎么了?
答案 0 :(得分:1)
您必须知道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]
因此,超级管理员可以去任何其他所有允许的grup。 Admin,拥有内容管理员的权利。内容管理员拥有用户的权利。
检查security.yml文件中的访问控制。
access_control:
- { path: ^/private_directory$, roles: MUST_BE_RIGHT_TO_SEE_HERE }
因此,角色MUST_BE_RIGHT_TO_SEE_HERE只能看到private_directory。任何其他角色都不能。