Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Symfony1 如何在symfony中按环境保护应用程序?_Symfony1_Config_Security - Fatal编程技术网

Symfony1 如何在symfony中按环境保护应用程序?

Symfony1 如何在symfony中按环境保护应用程序?,symfony1,config,security,Symfony1,Config,Security,我犯了一个错误 apps/frontend/config/security.yml 但它不起作用,我错过了什么吗?你到底想实现什么?我想你可能误解了这是安全的财产 通常,它用于声明应用程序的哪些模块/操作需要从插件(例如)进行身份验证,而不是保护整个环境。您到底想实现什么?我想你可能误解了这是安全的财产 通常,它用于声明应用程序的哪些模块/操作需要从插件进行身份验证,例如,而不是保护整个环境。正如steve所说,is\u secure不能基于每个环境进行配置 我猜你是在试图用密码保护你的整个开发

我犯了一个错误

apps/frontend/config/security.yml


但它不起作用,我错过了什么吗?

你到底想实现什么?我想你可能误解了这是安全的财产


通常,它用于声明应用程序的哪些模块/操作需要从插件(例如)进行身份验证,而不是保护整个环境。

您到底想实现什么?我想你可能误解了这是安全的财产


通常,它用于声明应用程序的哪些模块/操作需要从插件进行身份验证,例如,而不是保护整个环境。

正如steve所说,is\u secure不能基于每个环境进行配置

我猜你是在试图用密码保护你的整个开发环境?我建议您使用.htaccess/.htpasswd保护或等效保护以这种方式保护站点

如果您不能或出于任何原因希望在symfony中执行此操作,则可以通过创建自定义的sfSecurityConfigHandler.class.php使symfony以这种方式接受配置

配置处理程序中有一个名为getConfiguration的方法,它负责获取各种yml文件中设置的值,并在应用了所有over rides等之后创建最终值的数组

sfSecurityConfigHander.class.php的getConfiguration如下所示:

static public function getConfiguration(array $configFiles)
{
  $config = self::flattenConfiguration(self::parseYamls($configFiles));

  // change all of the keys to lowercase
  $config = array_change_key_case($config);

  return $config;
}
static public function getConfiguration(array $configFiles)
{
  $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));

  foreach ($config as $name => $dbConfig)
  {
    if (isset($dbConfig['file']))
    {
      $config[$name]['file'] = self::replacePath($dbConfig['file']);
    }
  }

  return $config;
}
而依赖于环境的配置(如sfDatabaseConfigHandler.class.php)有如下配置:

static public function getConfiguration(array $configFiles)
{
  $config = self::flattenConfiguration(self::parseYamls($configFiles));

  // change all of the keys to lowercase
  $config = array_change_key_case($config);

  return $config;
}
static public function getConfiguration(array $configFiles)
{
  $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));

  foreach ($config as $name => $dbConfig)
  {
    if (isset($dbConfig['file']))
    {
      $config[$name]['file'] = self::replacePath($dbConfig['file']);
    }
  }

  return $config;
}
这里的关键区别是使用self::FlattConfigurationWithEnvironment而不是self::FlattConfiguration。我认为,如果您通过以下方式扩展sfSecurityConfigHandler:

class mySecurityConfigHandler extends sfSecurityConfigHandler {
    static public function getConfiguration(array $configFiles)
    {
      $config = self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles));

      // change all of the keys to lowercase
      $config = array_change_key_case($config);

      return $config;
    }
}
然后在配置中创建一个config_handlers.yml文件,告诉symfony使用此类:

modules/*/config/security.yml:
  class:    sfSecurityConfigHandler
  file:     %sf_lib_dir%/path/to/mySecurityConfigHandler

然后,您应该能够根据问题使用yml来配置每个环境的安全性。

正如steve所说,is_secure不能基于每个环境进行配置

我猜你是在试图用密码保护你的整个开发环境?我建议您使用.htaccess/.htpasswd保护或等效保护以这种方式保护站点

如果您不能或出于任何原因希望在symfony中执行此操作,则可以通过创建自定义的sfSecurityConfigHandler.class.php使symfony以这种方式接受配置

配置处理程序中有一个名为getConfiguration的方法,它负责获取各种yml文件中设置的值,并在应用了所有over rides等之后创建最终值的数组

sfSecurityConfigHander.class.php的getConfiguration如下所示:

static public function getConfiguration(array $configFiles)
{
  $config = self::flattenConfiguration(self::parseYamls($configFiles));

  // change all of the keys to lowercase
  $config = array_change_key_case($config);

  return $config;
}
static public function getConfiguration(array $configFiles)
{
  $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));

  foreach ($config as $name => $dbConfig)
  {
    if (isset($dbConfig['file']))
    {
      $config[$name]['file'] = self::replacePath($dbConfig['file']);
    }
  }

  return $config;
}
而依赖于环境的配置(如sfDatabaseConfigHandler.class.php)有如下配置:

static public function getConfiguration(array $configFiles)
{
  $config = self::flattenConfiguration(self::parseYamls($configFiles));

  // change all of the keys to lowercase
  $config = array_change_key_case($config);

  return $config;
}
static public function getConfiguration(array $configFiles)
{
  $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));

  foreach ($config as $name => $dbConfig)
  {
    if (isset($dbConfig['file']))
    {
      $config[$name]['file'] = self::replacePath($dbConfig['file']);
    }
  }

  return $config;
}
这里的关键区别是使用self::FlattConfigurationWithEnvironment而不是self::FlattConfiguration。我认为,如果您通过以下方式扩展sfSecurityConfigHandler:

class mySecurityConfigHandler extends sfSecurityConfigHandler {
    static public function getConfiguration(array $configFiles)
    {
      $config = self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles));

      // change all of the keys to lowercase
      $config = array_change_key_case($config);

      return $config;
    }
}
然后在配置中创建一个config_handlers.yml文件,告诉symfony使用此类:

modules/*/config/security.yml:
  class:    sfSecurityConfigHandler
  file:     %sf_lib_dir%/path/to/mySecurityConfigHandler

然后,您应该能够根据问题使用yml来配置每个环境的安全性。

我想出于测试目的禁用安全性,而无需手动修改配置,这对我来说更方便。是的,我的一些模块是安全的,我只想在开发环境中不使用安全性对其进行测试。不幸的是,我认为唯一的方法是在每个安全模块中将开发环境设置为is_secure:false。相同,特定于环境的配置在模块中不起作用。all:is\u secure:true dev:is\u secure:false不起作用?很抱歉我被难住了@belaz,请注意,配置级联覆盖始终处于较低级别,因此,如果您将前端安全设置为false,但模块有自己的config/security/yml,其中security设置为true,则这些模块将保持安全。我想出于测试目的禁用安全性,而无需手动修改配置,对我来说更方便。是的,我的一些模块是安全的,我只想在开发环境中不使用安全性对其进行测试。不幸的是,我认为唯一的方法是在每个安全模块中将开发环境设置为is_secure:false。相同,特定于环境的配置在模块中不起作用。all:is\u secure:true dev:is\u secure:false不起作用?很抱歉我被难住了@belaz,请注意,配置级联覆盖始终处于较低级别,因此,如果您将前端安全设置为false,但模块具有自己的config/security/yml,其中security设置为true,则这些模块将保持安全。