2010-02-21 64 views

回答

3

正如史蒂夫所說,is_secure不能在每個環境的基礎上進行配置。

我的猜測是你試圖密碼保護你的整個開發環境?我建議你使用.htaccess/.htpasswd保護或相當於這種方式來保護網站。

如果您不能或出於某種原因想這樣做在symfony中,你可以做的symfony以這種方式接受的配置通過創建自定義sfSecurityConfigHandler.class.php

配置處理器已經在他們的方法叫做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; 
} 

,同時依賴於環境的結構,如sfDatabaseConfigHandler.class.php具有一個這樣的:

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 :: flattenConfigurationWithEnvironment over self :: flattenConfiguration。我認爲,如果你與擴展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 

然後,您應該能夠使用作爲陽明海運根據問題來配置每個環境的安全性。

1

你究竟想達到什麼目的?我想你可能會誤解is_secure財產的目的。

通常用於聲明應用程序的哪些模塊/動作需要身份驗證(來自插件(如sfGuard)),而不是用於保護整個環境。

+0

我想爲測試目的禁用安全性,而無需手動修改配置,這對我來說更方便。 是的,我的一些模塊已被證實,我只是想在開發環境中沒有安全性的情況下進行測試。 – belaz

+0

不幸的是我認爲唯一的方法是在每個安全模塊中將開發環境設置爲'is_secure:false'。 – Steve

+0

相同,環境特定的配置在模塊中不起作用。 – belaz