Bagaimana cara menyembunyikan bidang pengguna khusus di profil pengguna?

20

Di Drupal 7, apa cara terbaik untuk mencegah pengguna non-administratif mengubah bidang profil pengguna khusus?

Gunakan case: Saya telah membuat bidang pengguna yang disebut "ID Pelanggan" yang saya tidak ingin pengguna (salah satu pelanggan saya yang sebenarnya) berubah. Kolom ada untuk referensi saya sendiri dan untuk penggunaan program di modul lain. Saya tidak keberatan pengguna melihat ID Pelanggan, tetapi mereka seharusnya tidak dapat mengeditnya.

Haruskah saya mengganti template halaman untuk halaman profil pengguna? Jika ya, bagaimana templat diubah untuk membuat bidang hanya baca atau tidak terlihat?

Terima kasih banyak atas bantuan Anda!

Chris

ctlarsen
sumber

Jawaban:

17

Saya pikir Izin Lapangan adalah apa yang Anda cari. Berikut ini adalah kutipan tentang hal itu (dari halaman proyek modul):

... memungkinkan administrator situs untuk mengatur izin tingkat lapangan untuk mengedit, melihat, dan membuat bidang pada entitas apa pun.

Fitur :

  • Aktifkan izin bidang pada entitas apa pun, bukan hanya simpul.
  • Izin bidang berbasis peran memungkinkan pola tampilan yang berbeda berdasarkan pada apa yang dimiliki pengguna.
  • Izin tingkat penulis memungkinkan untuk melihat dan mengedit bidang berdasarkan siapa pemilik entitas.
  • Izin untuk setiap bidang tidak diaktifkan secara default. Sebagai gantinya, administrator dapat mengaktifkan izin ini secara eksplisit untuk bidang di mana fitur ini diperlukan.
  • Ikhtisar izin bidang
pasine
sumber
Terima kasih, notme! Saya telah menginstal modul Izin Bidang (versi alpha terbaru, yang membuat saya sedikit gugup, tetapi apa pun), dan itu menyembunyikan bidang dari pengguna ketika pengguna melihat profilnya. Setelah bereksperimen dengan semua pengaturan modul, sepertinya tidak ada cara untuk membuat bidang terlihat tetapi hanya baca. Bukan persyaratan mutlak, tetapi akan menyenangkan untuk dimiliki.
ctlarsen
Mengatur bidang agar terlihat berarti bahwa bidang teks ditampilkan sebagai teks biasa. Jika Anda ingin mempertahankan bidang teks dan mengaturnya sebagai hanya-baca, saya kira Anda harus menggunakan hook_form_alter pada formulir Anda.
pasine
Sekali lagi terima kasih. Saya akan mengambil rute hook_form_alter dan melihat di mana itu membawa saya. Sepertinya itu cara terbaik untuk pergi.
ctlarsen
Modul ini Field Permissionsberfungsi dengan baik dengan Drupal 8 tetapi Anda hanya bisa menyembunyikan bidang khusus yang menurut saya (saya perlu menambahkan juga nama pengguna)
Sébastien Gicquel
5

Untuk menyembunyikan bidang dari formulir profil pengguna, Anda dapat mengatur #accessproperti bidang menjadi FALSE menggunakan hook_form_FORMID_alter.

Cuplikan berikut menyembunyikan bidang field_organisationdari formulir profil pengguna untuk non-admin:

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;
  }
}

Lihat juga pertanyaan serupa tentang drupalanswers

Anda juga dapat menyembunyikan bidang dari halaman profil pengguna (bukan formulir) menggunakan template_preprocess_user_profile

Cuplikan berikut menyembunyikan bidang field_organisationdari halaman pengguna untuk non-admin:

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

Tampaknya ada modul yang disebut http://drupal.org/project/user_readonly "Modul ini memungkinkan administrator untuk mencegah modifikasi bidang akun / profil pengguna. Administrator dapat memilih bidang mana yang akan dianulir, atau bidang mana yang akan diizinkan."

Jayesh Jose
sumber