Drupal 7では、管理者以外のユーザーがカスタムユーザープロファイルフィールドを変更できないようにする最善の方法は何ですか?
使用例:「顧客ID」というユーザーフィールドを作成しましたが、ユーザー(実際の顧客)は変更したくありません。このフィールドは、私自身の参照用および他のモジュールでのプログラムによる使用のために存在します。お客様にお客様IDが表示されても問題ありませんが、編集できないはずです。
ユーザープロファイルページのページテンプレートを上書きする必要がありますか?もしそうなら、テンプレートをどのように変更して、フィールドを読み取り専用または非表示にしますか?
手伝ってくれてありがとうございます!
クリス
私は Field Permissions があなたが探しているものだと思います。これについての引用は次のとおりです(モジュールのプロジェクトページから):
...サイト管理者は、任意のエンティティのフィールドを編集、表示、作成するためのフィールドレベルの権限を設定できます。
特徴:
- ノードだけでなく、任意のエンティティのフィールド権限を有効にします。
- 役割ベースのフィールド権限により、ユーザーのアクセス権に基づいて異なる表示をパターン化できます。
- 作成者レベルの権限により、エンティティの所有者が誰であるかに基づいて、フィールドを表示および編集できます。
- 各フィールドの権限は、デフォルトでは有効になっていません。代わりに、管理者は、この機能が必要なフィールドに対してこれらの権限を明示的に有効にすることができます。
- フィールド権限の概要
ユーザープロファイルフォームからフィールドを非表示にするには、 #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;
}
}
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']);
}
}
http://drupal.org/project/user_readonly と呼ばれるモジュールがあるようです。このモジュールにより、管理者はユーザーアカウント/プロファイルフィールドの変更を防ぐことができます。管理者はどのフィールドを許可されないか、どのフィールドが許可されます。」