问题描述
||
我正在使用generator0ѭ模块的管理生成器。
generator.yml
文件的编辑部分如下所示:
edit:
title: Editing User \"%%username%%\"
display:
\"User\": [first_name,last_name,email_address,username,password,password_again]
\"Permissions and groups\": [is_active,groups_list,sites_list]
现在,不是每个用户都可以访问此表单,只有站点管理员允许站点管理员创建和更新自己的用户。 User
和Site
之间存在多对多关系。每个站点管理员也是用户,因此具有一组关联的站点。
我希望“ 5”不显示所有站点,而是仅显示与站点管理员关联的站点,从而确保站点管理员不能将自己的用户之一放入与该管理员无关的站点。
在我看来,我需要用其他方法代替ѭ5,以完成此操作,但我不知道在哪里以及如何进行此更改。
解决方法
我认为的唯一方法是通过更改“自动生成的表单”中的sites_lists小部件。以您的情况为例,您可以执行以下操作:
<!-- SitesTable -->
public function getByUser($userId){
//create your query to find all sites from that user
$userSites = $this->createQuery()->...
->where(\'user_id = ?\',$userId);
//create the array
$choices = array();
foreach ( $userSites as $site ) {
$choices[$site->getId()] = $site->getName();
}
return $choices;
}
<!-- sfGuardUserForm -->
class sfGuardUserForm extends BaseSfGuardUserForm{
public function configure() {
//unset the old sites_list
unset($this[\'sites_list\']);
//obtain the user id (depends on how it\'s implemented,i\'m not using sfGuard)
$userId = sfContext::getInstance()->getUser()->getId();
$choices = Doctrine::getTable(\'Sites\')->getByUser($userId);
//set the new widget filtered
$this->setWidget(\'sites_list\',new sfWidgetFormChoice(array(\'choices\' => $choices)));
$this->setValidator(\'sites_list\',new sfValidatorChoice(array(\'choices\' => array_keys($choices))));
}