Symfony:如何将前台和后台分开 Users/Sessions

Symfony: how to separate Users/Sessions for Frontoffice and Backoffice

我在同一个应用程序中有一个包含前台和后台的项目。 URL.

后台用^/admin/分隔

Backoffice 需要有Administrator 对象作为登录的User,Frontoffice 需要同时有Member 对象作为登录的User。

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

您可能想为您的 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 文件可能会有所帮助。

根据 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 }

可在此处找到有关创建自定义提供程序的更多信息:https://symfony.com/doc/current/security/custom_provider.html