web-dev-qa-db-ja.com

ユーザープロファイルのカスタムユーザーフィールドを非表示にする方法

Drupal 7では、管理者以外のユーザーがカスタムユーザープロファイルフィールドを変更できないようにする最善の方法は何ですか?

使用例:「顧客ID」というユーザーフィールドを作成しましたが、ユーザー(実際の顧客)は変更したくありません。このフィールドは、私自身の参照用および他のモジュールでのプログラムによる使用のために存在します。お客様にお客様IDが表示されても問題ありませんが、編集できないはずです。

ユーザープロファイルページのページテンプレートを上書きする必要がありますか?もしそうなら、テンプレートをどのように変更して、フィールドを読み取り専用または非表示にしますか?

手伝ってくれてありがとうございます!

クリス

19
ctlarsen

私は Field Permissions があなたが探しているものだと思います。これについての引用は次のとおりです(モジュールのプロジェクトページから):

...サイト管理者は、任意のエンティティのフィールドを編集、表示、作成するためのフィールドレベルの権限を設定できます。

特徴

  • ノードだけでなく、任意のエンティティのフィールド権限を有効にします。
  • 役割ベースのフィールド権限により、ユーザーのアクセス権に基づいて異なる表示をパターン化できます。
  • 作成者レベルの権限により、エンティティの所有者が誰であるかに基づいて、フィールドを表示および編集できます。
  • 各フィールドの権限は、デフォルトでは有効になっていません。代わりに、管理者は、この機能が必要なフィールドに対してこれらの権限を明示的に有効にすることができます。
  • フィールド権限の概要
17
pasine

ユーザープロファイルフォームからフィールドを非表示にするには、 #access を使用して、フィールドのhook_form_FORMID_alterプロパティをFALSEに設定します。

次のスニペットは、管理者以外のユーザープロファイルフォームからフィールドfield_organisationを非表示にします。

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

drupalanswersに関するこの同様の質問も参照

template_preprocess_user_profile を使用して、(フォームではなく)ユーザープロファイルページからフィールドを非表示にすることもできます。

次のスニペットは、管理者以外のユーザーページからフィールドfield_organisationを非表示にします。

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}
5
batigolix

http://drupal.org/project/user_readonly と呼ばれるモジュールがあるようです。このモジュールにより、管理者はユーザーアカウント/プロファイルフィールドの変更を防ぐことができます。管理者はどのフィールドを許可されないか、どのフィールドが許可されます。」

1
Jayesh Jose