gpt4 book ai didi

Symfony 2 : Accessing a firewalled route with two separate providers

转载 作者:行者123 更新时间:2023-12-04 18:01:55 25 4
gpt4 key购买 nike

我们有一个系统,管理员和标准用户由他们自己独立的安全提供商处理。这导致管理页面出现问题,因为管理员无法访问主站点防火墙后面的任何文件或图像,除非他们也登录到主站点。

无论提供者如何,所有经过身份验证的用户和管理员都需要可以访问图像和文件。它们通过提供更细粒度访问控制的 Controller 提供服务。

是否可以定义多个提供者以允许访问路线?

这是我们当前 security.yml 的精简版:

security:
providers:
admin_user_db:
entity: { class: OurAdminUserBundle:AdminUser, property: username }
site_user_db:
entity: { class: OurSiteUserBundle:SiteUser, property: username }
firewalls:
admin_login:
pattern: ^/admin/login$
security: false
site_user_login:
pattern: ^/login
security: false
file_route:
pattern: ^/file
anonymous: ~
### We need to allow this route only for authorized users from
### either admin_user_db or site_user_db providers
admin_secured_area:
pattern: ^/admin
http_basic: ~
provider: admin_user_db
form_login:
check_path: /admin/login_check
login_path: /admin/login
logout:
path: /admin/logout
target: /
site_secured_area:
pattern: .*
http_basic: ~
provider: site_user_db
form_login:
check_path: /check_login
login_path: /login
failure_path: /login
failure_forward: false
logout:
path: /logout
target: /

最佳答案

我猜你要找的是ChainProvider .此提供程序将配置为按顺序使用您当前的两个提供程序。

链提供者将首先尝试使用其配置的第一个提供者对用户进行身份验证。如果成功,则用户通过身份验证。如果失败,链提供者将尝试下一个,依此类推,直到没有更多的提供者可以尝试。

我使用这种技术让用户通过表单登录或 Facebook 登录进行身份验证。我有两个提供者,一个用于 facebook,一个用于表单。然后,在我的防火墙中,供应商是链供应商,然后,用户可以使用他们的凭据或他们的 Facebook 帐户登录。

由于链提供者是顺序的,我建议将可能最常使用的提供者放在首位。

这是从 Symfony 文档站点中获取的配置示例:

security:
providers:
chain_provider:
chain:
providers: [in_memory, user_db]
in_memory:
users:
foo: { password: test }
user_db:
entity: { class: Acme\UserBundle\Entity\User, property: username

您可以在此处查看文档:
  • Using Multiple User Providers

  • 问候,
    马特

    关于Symfony 2 : Accessing a firewalled route with two separate providers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299513/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com