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

时间:2014-12-09 17:56:43

标签: php symfony fosuserbundle

我有一个前端和后端应用程序。两者共享相同的FOSUserBundle用户表。我正在处理的应用程序背后的逻辑不允许“admin”(ROLE_ADMIN或组ADMIN)在前端登录,所以我需要抓住登录流程,无论用户属于小组ADMIN或拥有ROLE_SUPERADMINROLE_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的用户仍然可以在前端(/)登录,他们应该不对吗?那怎么了?

1 个答案:

答案 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。任何其他角色都不能。