1

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" />&nbsp;<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" />&nbsp;<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" />&nbsp;<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" />&nbsp;<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 テーブルからフィールド名を追加するだけで機能することをどこかで読みましたが、残念ながらそうではありません。

4

2 に答える 2

1

まず第一に、基本クラスを編集しないでください。編集したいものは次のとおりです。

lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php

ここから、次を呼び出してデフォルトのウィジェットをオーバーライドできます。

$this->setWidget('permissions_list', new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true)));

独自のウィジェットを作成し、それを sfWidgetFormDoctrineChoice から拡張するのが最善のスタートです。基本的に、エコーされるphp文字列としてhtmlを返します。最終的に頭を悩ませるのは簡単です。

メインのユーザー フォームを編集するときにプロファイル フォームを含めるには、同じ sfGuardUserForm クラスで非常に簡単です。

$this->embedForm('profile', new sfGuardUserProfileForm($this->getObject->NAME_OF_PROFILE_RELATIONSHIP));

その最後の呼び出しは私の頭から離れているため、構文が間違っている可能性があるため、チェックしてください。もちろん、関係をプロファイル関係の名前に置き換えてください。

于 2010-06-12T12:35:41.320 に答える
0

まず、(フロントエンド)の通常のユーザーではなく、新しいフォーム(バックエンド)configure()を配置する必要があります。UserAdmin

次に、configure()メソッドに新しいウィジェット宣言があります。

$this->setWidget('permission_list', new sfWidgetFormDoctrineChoice(array(
'muliple' => true,   // this makes checkboxes (default=false=radio)
'model' => sfGuardPermission,
'expanded' => true   // changes from select menu -> radio or check (based on 'multiple' setting)
)));

幸運を:)

于 2010-08-23T17:03:10.863 に答える