Symfony如何拥有多个登录用户

jhkqcmku  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在symfony开发一个应用程序,有一个公共访问,用户可以用一个登录表单登录,还有一个管理部分,里面有另一个登录表单和另一个用户提供程序。
我为每个区域创建了一个LoginFormAuthenticator,并在每个区域创建了两个防火墙来选择正确的认证器。这是我的安全。yaml:
安全性:提供程序:管理提供程序(_P):实体:类:应用程序\实体\管理员用户属性:电子邮件Web提供商(_P):实体:类:应用\实体\用户属性:电子邮件

firewalls:
    admin:
        pattern: '^/admin'
        anonymous: true
        provider: admin_provider
        guard:
            authenticators:
                - App\Security\AdminLoginFormAuthenticator
        logout:
            path: /admin/logout
            target: /
    main:
        anonymous: true
        provider: web_provider
        guard:
            authenticators:
                - App\Security\LoginFormAuthenticator
        logout:
            path: /logout

现在我向项目中添加了一个/API,两个用户都应该能够访问,如果用户是public用户或admin用户,则不同地管理访问权限。
当在/API区域开发控制器时,我无法在通过管理员登录时获得用户。
问题是,在访问$this-〉getuser()或$this-〉denyAccessUnlessGranted()时,如何在/API中获得管理员用户(如果它已登录)或用户(按此顺序)?
我尝试在主防火墙中添加App\Security\AdminLoginFormAuthenticator,并在main. provider中添加chain_provider,但没有效果。

oalqel3c

oalqel3c1#

防火墙应该共享一个“公共上下文”,以便能够访问相同的连接用户。我认为这个措辞来自Symfony 2,其中X1 M0 N1 X是存储用户和授权的服务。
您需要稍微修改一下配置,然后$this->getUser()$this->denyAccessUnlessGranted()将为两个防火墙返回/使用相同的User对象。

firewalls:
    admin:
        pattern: '^/admin'
        context: my_app_context
        anonymous: true
        # ...
    main:
        anonymous: true
        context: my_app_context
        # ...

不需要公共的提供者或自定义的保护。尽管在任何地方使用相同的User类可能会更容易,或者为了清晰起见,至少使用公共的角色。

相关问题