在登录流程中捕获用户组,如果属于某个组,则删除对前端的访问权限


Catch user group in login flow and remove access to frontend if belongs to certain group

我有一个带有前端和后端的应用程序。两者共享相同的 FOSUserBundle 用户表。我正在处理的应用程序背后的逻辑不允许"admin"(ROLE_ADMIN或组ADMIN)在前端登录,因此无论用户属于组ADMIN还是具有ROLE_SUPERADMINROLE_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。任何其他角色都不能。