2009-11-02 50 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 ]