Symfony:如何为Frontoffice和Backoffice分隔用户/会话

时间:2018-01-12 09:03:02

标签: php symfony session symfony-2.8

我在同一个应用程序中有一个Frontoffice和Backoffice的项目。后台用URL中的^ / admin /分隔。

Backoffice需要具有管理员对象,因为登录用户和Frontoffice需要同时将Member对象记录在User中。

是否有办法在应用程序的不同部分同时拥有单独的会话和用户?不能使用子域(如admin.example.com)或不同的域用于后台。 如果是,那么如何实现呢?

2 个答案:

答案 0 :(得分:0)

您可能希望为2个区域设置不同的防火墙。以下是app/config/security.yml看起来如何的示例。请注意:此示例一个完整的security.yml文件,它应该只是提示您如何更改当前文件。

security:
    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        # firewall for the backoffice (i.e. all paths starting with /admin/ )
        backoffice:
            pattern: ^/admin/

            remember_me:
                secret:   '%kernel.secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /admin
                name: REMEMBERME_BACK 

        # firewall for the frontoffice (i.e. all paths not catched by previous firewalls)
        frontoffice:
            remember_me:
                secret:   '%kernel.secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /
                name: REMEMBERME_FRONT

对于更专业的解决方案,您当前的security.yml文件可能会有所帮助。

答案 1 :(得分:0)

根据Tobias Xy的答案和一些额外的研究,我能够找到解决方案。像Tobias Xy所说,主要想法是创建两个不同的防火墙。由于每个单独的防火墙都有自己的会话命名空间。只有缺少的部分是为管理员和成员提供两个不同的提供者。

提供者可以是任何类型(in_memory,实体等),但我使用了提供者服务,它使用一些自定义逻辑从数据库加载用户。为了测试目的,我使用了http_basic身份验证方法,所以我的security.yml看起来像这样:

security:
  providers:
    crence_cms_admins_provider:
      id: crence_cms.user.provider.admin

    crence_cms_members_provider:
      id: crence_cms.user.provider.member

  firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false

    backoffice:
      pattern: ^/admin/
      provider: crence_cms_admins_provider
      http_basic: ~

    frontoffice:
      anonymous: ~
      provider: crence_cms_members_provider
      http_basic: ~

  encoders:
    CrenceCMS\UserBundle\Model\AdminModel:
      algorithm: bcrypt
      cost: 12

    CrenceCMS\UserBundle\Model\MemberModel:
      algorithm: bcrypt
      cost: 12

  access_control:
    - { path: ^/admin/, roles: ROLE_ADMIN }

有关创建自定义提供程序的详细信息,请访问:What is the strict aliasing rule?