Kai*_*aja 5 url-routing symfony
我们有一个系统,管理员和标准用户由他们自己独立的安全提供商处理.这导致管理页面出现问题,因为管理员无法访问主站点防火墙后面的任何文件或图像,除非他们也登录到主站点.
无论提供商如何,所有经过身份验证的用户和管理员都需要可以访问这些图像和文件.它们通过控制器提供,该控制器提供更细粒度的访问控制.
是否可以定义多个提供商以允许访问路由?
这是我们当前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: /
Run Code Online (Sandbox Code Playgroud)
我想你要找的是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
Run Code Online (Sandbox Code Playgroud)
您可以在这里查看文档:
问候,马特
归档时间: |
|
查看次数: |
3784 次 |
最近记录: |