Symfony4 针对不同环境的不同安全配置

Symfony4 different security configurations for different environments

我在 symfony 3.4 中看到了有关执行此操作的所有说明,但我不知道如何在 Symfony 4 中执行此操作。我有一个自定义环境,当开发人员将 APP_ENV 设置为该环境时环境 我想使用不同的 security.yaml。比如说我创建了一个配置环境 'local',当我有 config/packages/local/security.yaml 和 APP_ENV=local 时,我的应用程序仍然默认为 config/packages/security.yaml。我希望 config/packages/security.yaml 被完全忽略以支持 config/packages/local/security.yaml.

这是我的 prod/security.yaml:

security:
    providers:
        shibboleth:
            id: App\Security\User\ShibbolethUserProvider
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            stateless: true
            anonymous: ~
            guard:
                authenticators:
                    - app.shibboleth_authenticator

            logout:
                path: /logout
                success_handler: app.shibboleth_authenticator

    access_control:
        - { path: ^/result, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

这是我的 local/security.yaml:

security:
    providers:
        in_memory: { memory: ~ }
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: ~

在 Symfony4 中,您将配置拆分到环境文件夹中。你想做的大概是这样的:

.
└── config
    └── packages
        ├── dev
        ├── local
        │   └── security.yaml
        ├── prod
        │   └── security.yaml
        └── tests

由于您 Kernel.php https://github.com/symfony/recipes/blob/34fc4212d838ac6c49a2b9892e2aa1d926149192/symfony/framework-bundle/3.3/src/Kernel.php#L48

中的这一行,它以这种方式工作
$loader->load($confDir.'/{packages}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob');