私は sfDoctrineGuardPlugin と Symfony 1.4.20 を使用してアプリケーションを開発しており、次のように 3 人のユーザーと 3 つのユーザー グループといくつかの権限を持っています。
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 を使用していますが、以下のコード サンプルでは、グループと権限の正しい名前を示しています。
編集:質問を改善するので、これを
詳しく見てから、同じようにしようとしていますが、コードに適応しているので、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」権限を持つユーザーを使用してログインすると、機能しません。ウィジェット内のすべてのグループを表示でき、その場合に表示するためだけに探しています「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'
ても何も起こらないので、メソッドが呼び出されていないと思われます
編集 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'。
次に、パラメーターを追加しましたmodel
:
$this->widgetSchema['groups_list'] = new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'table_method' => 'getListForAdmin', 'query' => Doctrine::getTable('sfGuardGroup')->getListForAdmin()));
しかし、最初のアプローチと同じエラーが発生します。問題はgetListForAdmin()
機能にあると思われますが、実際にはどこが正確かわかりません
この時点で何が問題なのですか?