Я занимаюсь разработкой приложения с помощью 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 должен иметь возможность добавлять пользователей в приложение, но может видеть только Group2 и Group3 в разделе «Параметры групп», u2 должен иметь возможность добавлять пользователей в приложение, но может видеть только Group3 в разделе «Параметры групп», поэтому u1 и u2 не должны добавлять пользователей, принадлежащих к Group1, как я могу получить это с помощью sfDoctrineGuard? Возможно?
ПРИМЕЧАНИЕ: Я использую GroupN в качестве примера, но ниже в примере кода указаны правильные имена для групп и разрешений!
EDIT: Улучшить вопрос Таким образом, после более внимательно взглянуть на this я пытаюсь к тому же, но с учетом моего кода, так в 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 де Servicios» и имеет can_a разрешения» Dmin' и „can_admin_full“ и я могу видеть все группы в виджете, и я ищу только для видеть в этом случае „Administradores Monitor“ и „Monitor“
EDIT 2 Также попробуйте этот другой код:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
и до сих пор не работает, я меняю 'table_method' => 'getListForAdmin'
в 'table_method' => 'getListForAdmin1'
и ничего не происходит, так что я подозреваю, что этот метод никогда не вызывается
EDIT 3 N вл он работает, но увидеть это: Если я использую этот подход:
$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]: Invalid parameter number: number of bound variables does not match number of tokens
Если я использую другой подход:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
Я получаю эта другая ошибка:
sfWidgetFormDoctrineChoice requires the following options: 'model'.
Затем я добавил параметр model
:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
Но получить такую же ошибку, как первый подход, я подозреваю, что проблема в getListForAdmin()
функции, но на самом деле не знаю, где именно
Что случилось в этот момент?
Да, это возможно. Но помните, что SO - это не то место, где кто-то будет писать код для вас, но могли бы вы найти помощь, когда вы застряли. Покажите нам, что вы пытались достичь, что вам нужно, и у вас были проблемы. Тогда мы сможем вам помочь. –
@MichalTrojanowski Привет и спасибо за ваш ответ, я не прошу кого-то сделать эту работу для меня, просто пытаясь получить правильный путь, чтобы это сделать. Я имею в виду некоторые предложения, в которых файлы для редактирования, какие методы, какие советы по это просто, чтобы получить всю идею, вы можете помочь в этом? – Reynier
Это намного лучше теперь :) См. Мой ответ ниже. Не уверен, что это проблема, но давайте начнем с чего-то, и мы получим результат в конечном итоге;) –