php - Symfony2 获取位于 security.yml 中的 access_control 参数

标签 php security symfony service access-control

我正在尝试获取位于我的 security.yml 中的 access_control 参数作为自定义服务中的数组。

就像获取 role_hierarchy 参数一样,我认为它可以使用以下代码:

$accessParameters = $this->container->getParameter('security.access_control');

不幸的是,情况并非如此。谁能告诉我如何获取参数?

最佳答案

无法从容器中获取access_control参数。
这是因为这个参数是only used创建request matchers将被注册为 AccessMap稍后在 AccessListener 中给出,然后被遗留下来而没有将其注册到容器中。

您可以尝试一些骇人听闻的方法来让这些匹配器恢复正常

$context  = $this->get("security.firewall.map.context.main")->getContext();
$listener = $context[0][5];
// Do reflection on "map" private member

但这是一种丑陋的解决方案。

我可以看到如何获取它们的另一种方法是再次解析安全文件

use Symfony\Component\Yaml\Yaml;

$file   = sprintf("%s/config/security.yml", $this->container->getParameter('kernel.root_dir'));
$parsed = Yaml::parse(file_get_contents($file));

$access = $parsed['security']['access_control'];

如果你想将这个配置注册到一个服务中,你可以这样做

services.yml

services:
    acme.config_provider:
        class: Acme\FooBundle\ConfigProvider
        arguments:
            - "%kernel.root_dir%"
    acme.my_service:
        class: Acme\FooBundle\MyService
        arguments:
            - "@acme.config_provider"

Acme\FooBundle\ConfigProvider

use Symfony\Component\Yaml\Yaml;

class ConfigProvider
{
    protected $rootDir;

    public function __construct($rootDir)
    {
        $this->rootDir = $rootDir;
    }

    public function getConfiguration()
    {
        $file = sprintf(
            "%s/config/security.yml",
            $this->rootDir
        );
        $parsed = Yaml::parse(file_get_contents($file));

        return $parsed['security']['access_control'];
    }
}

Acme\FooBundle\MyService

class MyService
{
    protected $provider;

    public function __construct(ConfigProvider $provider)
    {
        $this->provider = $provider;
    }

    public function doAction()
    {
        $access = $this->provider->getConfiguration();

        foreach ($access as $line) {
            // ...
        }
    }
}

关于php - Symfony2 获取位于 security.yml 中的 access_control 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831114/

相关文章:

php - symfony 中非共享服务的目的是什么?

php - 如何在采购订单表单中插入多个 `product` 和多个其他变量

php - 覆盖created_at值

php - 我如何根据 Moodle 2.6.0 版本中的 $courseId 获取 $cm->id?

HTML5 本地存储安全

windows - 如何以编程方式获取强制密码历史组策略设置?

php - Travis CI 工作正常,但 Coveralls 看不到构建

php - Symfony 2 - 我应该在哪里放置实用程序类?

php - 随机数据的 MD5 散列列表不统一 (PHP)

web-services - 我需要确保我的网络服务安全吗?