2009-11-02 93 views
1

我有一個網站有大量的管理生成器來照顧各種各樣的表。在經過身份驗證的用戶的領域內,我希望能夠拒絕訪問,不僅限於個人操作或字段,而是整個管理模塊。根據憑證限制整個symfony管理生成器頁面

generator.yml似乎沒有全局憑證參數,並且在模塊級別放入security.yml似乎沒有任何效果。

我瀏覽過生成的代碼,看着cache/front/dev/modules/autoFoo/actions/actions.class.php,特別是在preExecute()中,但我不知道該怎麼做。我想我必須在我自己的actions.class.php文件中覆蓋preExecute(),但我有點不確定需要什麼,例如,何時調用parent :: preExecute()(if實際上我需要或不需要)。

回答

1

回答我的問題,有一些初步的調查結果,它會出現:

class fooActions extends autoFooActions 
{ 
    public function preExecute() { 
    if (!sfContext::getInstance()->getUser()->hasCredential('can_do_foo')) { 
     $this->redirect('@homepage'); 
    } 
    parent::preExecute(); 
    } 
} 

...至少會阻止人們黑客的網址以獲得在管理功能。但我被帶領相信sfContext::getInstance() is evil。因此,我仍在尋找正確的方法來做到這一點。

+1

它不是邪惡在行動/控制器中:]確實需要訪問上下文或/和會話。無論你在哪裏(並且在行動中,你都可以)使用$ this-> getContext()。 – gpilotino

2

我相信你可以通過設置「all」值來在模塊級security.yml中設置證書。也就是說,<模塊> /config/security.yml內,放:

all: 
    credentials: ModuleAccess 
+0

這就是我的想法,除了我嘗試'默認'作爲頂級的關鍵。在任何情況下都不起作用。 – dland

+0

我只是雙重檢查,這對我在1.2工作。 –

1

您security.yml文件在你的模型/ config文件夾應該是這樣的:

default: 
    is_secure: on 
    credentials: [ moduel_access ]