Symfony:如何分离前台和后台的用户/会话



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

后台需要将管理员对象设置为登录用户

,前台需要同时将成员对象设置为登录用户。

有没有办法同时为应用程序的不同部分设置单独的会话和用户?使用子域(如 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:
    CrenceCMSUserBundleModelAdminModel:
      algorithm: bcrypt
      cost: 12
    CrenceCMSUserBundleModelMemberModel:
      algorithm: bcrypt
      cost: 12
  access_control:
    - { path: ^/admin/, roles: ROLE_ADMIN }

有关创建自定义提供程序的详细信息,请参阅:https://symfony.com/doc/current/security/custom_provider.html

最新更新