Symfony:为某些类型的用户解除后端模块的安全.怎样


Symfony: un-secure a backend module for certain kinds of users. How?

开门见山--我有一个Symfony 1.3/Propel 1.4项目。我有一个模块,它通过is_secure: true在自己的security.yml中进行保护。我希望这个模块不仅可供超级管理员访问——我正在使用sfGuardPlugin符号插件。该模块位于backend应用程序中。

我想让具有type属性任何值的用户都可以访问该模块。该网站的普通用户有NULL,其余的都有某种价值。当我将安全指令更改为is_secure: false(只是为了测试它)时,我会转到/admin,并与具有一些type的用户一起登录,我会被正确重定向到/admin/purchases(唯一的非安全backend模块),但会出现安全错误消息——"您无权显示此页面"或类似的内容。

由于我对sfGuardPlugin(以及Symfony的总体安全性)不太熟悉,我想知道如何做到这一点。

请参阅有关操作安全性的文档。

使用sfGuardPlugin中的组权限为您选择的用户自动广告凭据(请参阅sfGuardPlugin的额外文档,以了解插件如何将用户组和权限转换为凭据)

如果您不想中继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
}

如果这适用于模块的更多操作,则可以在DRY(不要重复…)的情况下使用preExecute()方法

只要您为每个用户都拥有正确的凭据。在后端模块中security.yml文件你可以这样做:

all:
  credentials: [[admin, developer]]

或者你可以采取单独的行动:

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