【问题标题】:Symfony4 different security configurations for different environmentsSymfony4 针对不同环境的不同安全配置
【发布时间】:2018-10-26 22:03:42
【问题描述】:

我已经看到了在 symfony 3.4 中执行此操作的所有说明,但我不知道如何在 Symfony 4 中执行此操作。我有一个自定义环境,当开发人员将 APP_ENV 设置为该环境时,我想要不同的安全性要使用的 .yaml。例如,我创建了一个配置环境“本地”,当我有 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: ~

【问题讨论】:

    标签: symfony symfony4 symfony-security


    【解决方案1】:

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

    【讨论】:

    • 这实际上是我所拥有的,但它仍然不起作用。它只是抓取目录树中最先出现的“security.yaml”文件并忽略后面的任何文件,无论 APP_ENV 是什么。
    • 我更新了帖子以包含我的配置文件及其位置
    • 实际上这确实有效,这是一个缓存问题。谢谢!但似乎不起作用的一件事是,如果我想限制 config/packages/local/security.yaml 为 APP_ENV=local 工作,但又为所有其他环境设置另一个 security.yaml 文件。我尝试了config/security.yaml,但随后config/packages/local/security.yaml 也被本地环境禁用。根据这个symfony.com/doc/current/configuration/…,我认为这是可行的。
    • 实际上查看您发布的代码,我明白为什么它不起作用。他们应该为其他配置命名为config/services_dev.yaml。除了将 security.yaml 复制到所有环境目录之外,我真的没有看到任何其他选择...
    猜你喜欢
    • 2018-04-01
    • 2018-06-15
    • 2020-04-24
    • 1970-01-01
    • 2019-11-17
    • 2021-03-10
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多