2011-05-25 52 views
1

直指点 - 我有一个Symfony 1.3/Propel 1.4项目。我有一个模块,它通过is_secure: true在其自己的security.yml中保护。我希望这个模块不仅适用于超级管理员 - 我使用的是symfony插件sfGuardPlugin。该模块位于backend应用程序中。Symfony:对某些类型的用户不安全的后端模块。怎么样?

我想让该模块可以访问具有任何type属性值的用户。该网站的常规用户有NULL,其余的都有某种价值。当我将安全指令更改为is_secure: false(仅用于测试它)时,我然后转到/admin并与具有一些type的用户登录,我将其正确重定向到/admin/purchases(唯一的非安全backend模块),但出现安全错误消息 - “您无权显示此页面”或其他内容。

因为我对sfGuardPlugin(和Symfony的安全性一般)还不是很熟悉,所以我希望得到一些帮助,我该如何做到这一点。

回答

0

请参阅documentation了解操作安全性。从sfGuardPlugin

使用组权限自动为您选择的用户广告的凭证(见extra documentation为sfGuardPlugin以了解如何插件转换用户组和权限为凭证)

+0

我一定会看一看,但由于我还在Symfony的新秀如果你能够画出一些伪代码和哪些文件来触摸,我将不胜感激。你知道,当他有一个可以插手的示例代码时,使得新人更加自信。 ;) – dimitarvp 2011-05-25 09:43:41

+0

对文档进行了审查,但不幸的是目前它并没有涵盖我的场景,即:我已经有一个名为'purchase'的'backend'模块(它是通过Symfony的管理生成器生成的),我只想从管理员级别的安全性中过滤掉这个特定的模块(或其某些操作)。您链接的文档(第一个链接)不包含“后端”模块案例。 :-( – dimitarvp 2011-05-25 11:08:01

+0

好的,它是排序的。懒得分享一步一步的过程,但是我做到了,链接的文档帮了大忙。标记这个。 – dimitarvp 2011-05-25 12:00:04

0

如果你不想接力在security.yml凭证,你也可以一个动作里处理这个问题:

public function executeIndex($request){ 
    if(!$this->getUser()->hasGroup('desired-group')){ 
    $this->getUser->setFlash('message', 'You do not have access to show this page'); 
    return $this->redirect('admin/purchases'); 
    } 

    // more logic here 
} 

如果这种方式更适合您的模块的多个动作,yould可以使用preExecute()梅索德在干燥的情况下,(不重复自己... )

0

只要你有适合每个用户的凭证。在你的后端模块 security.yml文件,你可以这样做:

all: 
    credentials: [[admin, developer]] 

或者你也可以做个人的行动:

requestView: 
    credentials: [[supporter, admin, developer]]