Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防火墙声明顺序在security.yaml中是否重要?_Php_Symfony_Symfony4_Symfony Security - Fatal编程技术网

Php 防火墙声明顺序在security.yaml中是否重要?

Php 防火墙声明顺序在security.yaml中是否重要?,php,symfony,symfony4,symfony-security,Php,Symfony,Symfony4,Symfony Security,在我的项目中,我有2个提供者和2个防火墙 在声明防火墙时是否有遵守的命令?在我的示例中,如果我先从admin开始,然后再从user开始,它就可以完美地工作 如果我做相反的事,我就不能再和管理员联系了 为什么会发生这种情况 providers: app_user_provider: entity: class: App\Entity\User property: email app_user_admin_provide

在我的项目中,我有2个提供者和2个防火墙

在声明防火墙时是否有遵守的命令?在我的示例中,如果我先从
admin
开始,然后再从
user
开始,它就可以完美地工作

如果我做相反的事,我就不能再和管理员联系了

为什么会发生这种情况

providers:
    app_user_provider:
        entity:
            class: App\Entity\User
            property: email
    app_user_admin_provider:
        entity:
            class: App\Entity\Useradmin
            property: email

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    admin:
        anonymous: true
        pattern: ^/admin
        provider: app_user_admin_provider
        guard:
            authenticators:
                - App\Security\AdminFormAuthenticator
        logout:
            path: /admin/logout
            target: home
    user:
        anonymous: true
        pattern: ^/
        provider: app_user_provider
        guard:
            authenticators:
                - App\Security\LoginFormAuthenticator
        logout:
            path: /profile/logout
            target: home

access_control:
    - { path: ^/admin$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/profile, roles: ROLE_USER }

role_hierarchy:
    ROLE_ADMIN: ROLE_USER

这个顺序很重要,因为当发出请求时,第一个匹配的防火墙将被使用

如果第一个防火墙的模式是
^/
,那么它将匹配所有请求,并且不会评估其他防火墙

如果第一个防火墙的模式是
^/admin
,则“admin”防火墙将用于
/admin/
请求,“user”防火墙将用于与
^/admin
不匹配的任何其他请求