1

私は 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()機能にあると思われますが、実際にはどこが正確かわかりません

この時点で何が問題なのですか?

4

1 に答える 1

1

の条件を変更してみてくださいgetListForAdmin():

if ($user->hasPermissions('can_admin_full')) {
        $q->whereIn('g.name', array('Administradores Monitor', 'Monitor'));
    } else if ($user->hasPermissions('can_admin')) {
        $q->whereIn('g.name', array('Monitor'));
    }
于 2013-06-07T11:16:32.270 に答える