sfDoctrineGuard プラグインを使用すると、バックエンド管理機能が自動的に生成され、システムのユーザーを編集して権限を割り当てることができます。
そのためhttp://.../backend_dev.php/sf_guard_user/:id/edit
、選択可能なアクセス許可を含むユーザーの情報が表示されている場所にアクセスします。
デフォルトでは、パーミッションは複数選択ボックスとして表示され、HTML は次のようになります。
<select name="sf_guard_user[permissions_list][]" multiple="multiple" id="sf_guard_user_permissions_list">
<option value="1">Permission1</option>
<option value="2">Permission2</option>
<option value="3">Permission3</option>
<option value="4">Permission4</option>
</select>
私が好むのは、チェックボックスのリストです。だから私は周りを検索し、オプション「expanded」をtrueに設定すると、次のコードに追加することがわかりました:
'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true,)),
コードはこのファイルの一部です: lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm.class.php. このファイルを編集するべきではなかったと思います (sfDoctrineGuard を再インストールすると、変更が上書きされる可能性があります) が、それを機能させる別の方法を思いつきませんでした。
生成された HTML は次のとおりです。
<ul class="checkbox_list">
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="1" id="sf_guard_user_permissions_list_1" /> <label for="sf_guard_user_permissions_list_1">Permission1</label></li>
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="2" id="sf_guard_user_permissions_list_2" /> <label for="sf_guard_user_permissions_list_2">Permission2</label></li>
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="3" id="sf_guard_user_permissions_list_3" /> <label for="sf_guard_user_permissions_list_3">Permission3</label></li>
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="4" id="sf_guard_user_permissions_list_4" /> <label for="sf_guard_user_permissions_list_4">Permission4</label></li>
</ul>
ここで行う必要があるのは、プレフィックスに基づいてアクセス許可を分割することです。たとえば、user_action1、user_action2、file_action1、file_action2 という名前のアクセス許可がある場合、次のように表示されます。
User
checkbox (custom label) Action One
checkbox Action Two
File
checkbox (custom label) Action One
checkbox Action Two
しかし、これをどこから始めればよいかわかりません。編集するテンプレートがあれば簡単ですが、私は Forms フレームワークを扱っているので、テンプレートがオンザフライで生成されることを理解しています。それらは symonfy キャッシュ フォルダーで確認できます。
これについてどうすればいいですか?
sfWidgetFormDoctrineChoice と同じクラスを拡張する独自の sfWidgetFormDoctrineChoicePermission クラスを書き始めましたが、目的の出力のためにレンダリング関数を正しく編集するのに苦労しています。これがこの仕事の正しいやり方ですか?
また、sfGuardUserProfile モデルをユーザー編集ページ (上記と同じ) に統合する必要があります。sfGuardUser プラグイン モジュールの generator.yml ファイルを編集し、sfGuardUserProfile テーブルからフィールド名を追加するだけで機能することをどこかで読みましたが、残念ながらそうではありません。