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

时间:2018-05-16 18:33:49

标签: symfony symfony4 symfony-security

我已经看到了在symfony 3.4中执行此操作的所有说明但我无法弄清楚如何在Symfony 4中执行此操作。我有一个自定义环境,当开发人员将APP_ENV设置为该环境时,我想要一个不同的安全性.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: ~

1 个答案:

答案 0 :(得分:2)

在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');