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