@j0kの質問はこの問題にとって非常に重要です。常に同じ権限が必要な場合は、目的を達成するのはかなり簡単です。パーミッションを動的にしたい場合、ソリューションは少しトリッキーになります。
前者の場合、sgGuardUserに関連するテーブルのバックエンド(新規および編集)のアクションで使用されるFormクラスを編集する必要があります。ユーザーのリストを取得するための選択ウィジェットを編集する必要があります:(リレーション列がでuser_id
あり、Doctrineを使用していると仮定します):
$this->widgetSchema['user_id']->setOption('table_method' => 'retrieveForPermissionX');
次にsfGuardUserTable.class.php
、適切なクエリを準備する関数を追加する必要があります。
public function retrieveForPermissionX()
{
return $this->createQuery('u')
->innerJoin('u.sfGuardUserPermission up')
->innerJoin('u.Permissions p')
->where('p.name = "PermissionX"')
->orderBy('u.first_name ASC');
}
私が言ったように、異なる権限を使用する必要がある場合は、より注意が必要です。基本は同じです。フォーム内のウィジェットに適切なユーザーを選択する必要がありますが、使用する権限をフォームに通知する必要があります。
自動生成された新規アクションと編集アクションをオーバーライドする必要があると思います。必要なアクセス許可をURLのパラメーターとして渡し(または必要な特定のアクセス許可に特定のURLを使用し)、アクション内でアクセス許可をオプションとしてフォームに渡します。
$this->form = new UserInfoForm(null, array('permissions' => $permissions));
次に、この情報を使用して、選択ウィジェットで適切なテーブルメソッドを呼び出すことができます(またはクエリオブジェクトを生成します。代わりに、テーブルメソッドの代わりに、ウィジェットのオブジェクトを取得するために使用されるクエリオブジェクトを渡すこともできます)。