我正在使用 sfDoctrineGuardPlugin 和 Symfony 1.4.20 开发一个应用程序,然后我有三个用户和三个用户组以及一些权限如下:
user_name user_group permissions
u1 Group1 can_admin_full, can_admin
u2 Group2 can_admin
u3 Group3 no_admin
所以u1应该能够将用户添加到应用程序但只能在 Groups Options 下看到 Group2 和 Group3,u2应该能够将用户添加到应用程序但只能在 Groups Options 下看到 Group3,所以 u1 和 u2 不应该添加属于 Group1 的用户,我如何使用 sfDoctrineGuard 获得这个?这是可能的?
注意:我以 GroupN 为例,但下面的代码示例是组和权限的正确名称!
编辑:改进问题
所以在仔细看看这个之后,我试图相同但适应我的代码,所以lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php
我改变了这个:
class sfGuardUserForm extends PluginsfGuardUserForm {
public function configure() {
//groups_list
$this->getWidget('groups_list')->setOption('expanded', true);
$this->getWidget('groups_list')->setOption('table_method', 'getListForAdmin');
$this->getValidator('groups_list')->setOption('query', Doctrine::getTable('sfGuardGroup')->getListForAdmin());
}
}
我也做了这个改变 lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardGroupTable.class.php
class sfGuardGroupTable extends PluginsfGuardGroupTable {
/**
* Returns an instance of this class.
*
* @return object sfGuardGroupTable
*/
public static function getInstance() {
return Doctrine_Core::getTable('sfGuardGroup');
}
/**
* Builds list query based on credentials
*
*/
public function getListForAdmin() {
$user = sfContext::getInstance()->getUser();
$q = $this->createQuery('g');
if ($user->hasPermissions('can_admin_full')) {
$q->addWhere('g.name IN (?)', array('Administradores Monitor', 'Monitor'));
} else if ($user->hasPermissions('can_admin')) {
$q->addWhere('g.name IN (?)', array('Monitor'));
}
return $q;
}
}
但不工作,因为使用属于组“Administrador de Servicios”并具有权限“can_admin”和“can_admin_full”的用户登录,我可以看到小部件中的所有组,我正在寻找只是在这种情况下查看“管理员监控”和“监控”
编辑 2 也试试这个其他代码:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
仍然无法正常工作,我更改'table_method' => 'getListForAdmin'
为'table_method' => 'getListForAdmin1'
并没有任何反应,所以我怀疑该方法从未被调用
编辑 3 现在它正在工作,但看到这个:如果我使用这种方法:
$this->getWidget('groups_list')->setOption('expanded', true);
$this->getWidget('groups_list')->setOption('table_method', 'getListForAdmin');
$this->getValidator('groups_list')->setOption('query', Doctrine::getTable('sfGuardGroup')->getListForAdmin());
然后我得到这个错误:
SQLSTATE[HY093]:无效的参数号:绑定变量的数量与标记的数量不匹配
如果我使用其他方法:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
我收到另一个错误:
sfWidgetFormDoctrineChoice 需要以下选项:“模型”。
然后我添加了参数model
:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
但是得到与第一种方法相同的错误,我怀疑问题出在getListForAdmin()
功能上但真的不知道到底在哪里
此时有什么问题?