Symfony 4:如何在防火墙中拥有用于用户/管理员的多提供商



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.userapp.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

最新更新