i不能为用户提供两个不同的提供商,并且具有两种不同表格
我想为用户和管理员提供两个防火墙。我创建了两个链接两个不同实体的不同提供商。我可以作为用户登录,但从不作为管理员。我不明白我需要添加更多。
另一件事,我知道有app.user。但是还有app.admin吗?为了在两个不同的防火墙上拥有两个完全独立的帐户?
security:
providers:
user_provider:
entity:
class: AppEntityUser
property: username
admin_provider:
entity:
class: AppEntityAdmin
property: username
chain_provider:
chain:
providers: [user_provider, admin_provider]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
provider: user_provider
anonymous: true
logout:
path: /logout
target: /login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
form_login:
login_path: /login
check_path: /login
backoffice:
pattern: ^/backoffice
provider: admin_provider
logout:
path: /backoffice/logout
target: /backoffice/login
form_login:
login_path: /backoffice/login
check_path: /backoffice/login
access_control:
- { path: ^/backoffice/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backoffice, roles: ROLE_ADMIN }
- { path: ^/mon-compte, roles: ROLE_USER }
encoders:
AppEntityUser:
algorithm: bcrypt
cost: 12
AppEntityAdmin:
algorithm: bcrypt
cost: 12
我呼叫$authenticationUtils->getLastAuthenticationError()
null
错误开关防火墙订单,因此main
防火墙是最后一个。
SYMFONY每个请求仅使用一个防火墙,这是与pattern
匹配的第一个防火墙。因此,在您的情况下,它也将main
防火墙用于^/backoffice
URL,因为/backoffice
匹配^/
模式。
我不确定它是否会在这里解决您的所有问题,但是您需要这样做才能真正使用backoffice
防火墙。
关于app.user
和app.admin
-不,没有app.admin
。管理员也是用户,因此,当您将作为管理员登录时,您将使用app.user
这是我的更新security.yaml:
security:
providers:
admin_provider:
entity:
class: AppEntityAdmin
property: username
user_provider:
entity:
class: AppEntityUser
property: username
chain_provider:
chain:
providers: [user_provider, admin_provider]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backoffice:
pattern: ^/backoffice
provider: admin_provider
anonymous: true
logout:
path: admin.logout
target: admin.login
form_login:
login_path: admin.login
check_path: admin.login
default_target_path: admin.index
main:
pattern: ^/
provider: user_provider
anonymous: true
logout:
path: logout
target: login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
form_login:
login_path: login
check_path: login
access_control:
- { path: ^/backoffice/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backoffice, roles: ROLE_ADMIN }
- { path: ^/mon-compte, roles: ROLE_USER }
encoders:
AppEntityUser:
algorithm: bcrypt
cost: 12
AppEntityAdmin:
algorithm: bcrypt
cost: 12