Kullanıcı profilindeki özel bir kullanıcı alanı nasıl gizlenir?


20

Drupal 7'de, yönetici olmayan bir kullanıcının özel kullanıcı profili alanını değiştirmesini önlemenin en iyi yolu nedir?

Kullanım örneği: Kullanıcının (gerçek müşterilerimden herhangi birinin) değişmesini istemediğim "Müşteri Kimliği" adlı bir kullanıcı alanı oluşturdum. Alan kendi referansım ve diğer modüllerde programlı kullanım için var. Kullanıcının Müşteri Kimliği'ni görmesini umursamıyorum, ancak düzenleyememeleri gerekir.

Kullanıcı profili sayfası için sayfa şablonunu geçersiz kılmalı mıyım? Öyleyse, şablonu bir alanı salt okunur veya görünmez yapmak için nasıl değiştirilir?

Yardımın için çok teşekkürler!

Chris

Yanıtlar:


17

Aradığın alan izinleri olduğunu düşünüyorum . Bununla ilgili bir alıntı (modülün proje sayfasından):

... site yöneticilerinin herhangi bir varlık üzerinde alanları düzenlemek, görüntülemek ve oluşturmak için alan düzeyinde izinler belirlemesine olanak tanır.

Özellikler :

  • Yalnızca düğümlerde değil, herhangi bir varlıkta alan izinlerini etkinleştirin.
  • Kullanıcının sahip olduğu erişime bağlı olarak farklı görüntülemelere izin veren rol tabanlı alan izinleri.
  • Yazar düzeyinde izinler, alan sahibinin kim olduğuna göre alanların görüntülenmesine ve düzenlenmesine izin verir.
  • Her alan için izinler varsayılan olarak etkin değildir. Bunun yerine, yöneticiler bu özelliğin gerekli olduğu alanlar için bu izinleri açıkça etkinleştirebilir.
  • Alan izinlerine genel bakış

Teşekkürler, notme! Alan İzinleri modülünü yükledim (alfa sürümü en son, bu beni biraz gergin ama her neyse yapar) ve kullanıcı profilini görüntülediğinde alanı kullanıcıdan gizler. Modülün tüm ayarlarını denedikten sonra, alanı görünür yapmanın bir yolu değil, salt okunur. Mutlak bir gereklilik değil, ama olması güzel olurdu.
ctlarsen

Bir alanı görünür olacak şekilde ayarlamak, metin alanının düz metin olarak gösterilmesi anlamına gelir. Metin alanını korumak ve salt okunur olarak ayarlamak istiyorsanız, sanırım formunuzda bir hook_form_alter kullanmanız gerekir.
pasine

Tekrar teşekkürler, notme. Hook_form_alter rotasını izleyeceğim ve beni nereye götüreceğini göreceğim. Kulağa gitmenin en iyi yolu gibi geliyor.
ctlarsen

Modül Field PermissionsDrupal 8 ile iyi çalışıyor, ancak bence sadece özel alanları gizleyebilirim (ayrıca kullanıcı adını da yazmam gerekiyordu)
Sébastien Gicquel

5

Alanı kullanıcı profili formundan gizlemek için #accesskullanarak bir alanın özelliğini YANLIŞ olarak ayarlayabilirsiniz hook_form_FORMID_alter.

Aşağıdaki snippet, alanı field_organisationyönetici olmayanlar için kullanıcı profili formundan gizler :

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

Benzer bir soruyu da görün drupalanswers

Alanı template_preprocess_user_profile kullanarak kullanıcı profili sayfasından (formdan değil) de gizleyebilirsiniz.

Aşağıdaki snippet, alanı field_organisationyönetici olmayanlar için kullanıcı sayfasından gizler :

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

1

Http://drupal.org/project/user_readonly " adlı bir modül var gibi görünüyor . Modül bir yöneticinin kullanıcı hesabı / profil alanlarının değiştirilmesini engellemesine izin verir. Yönetici hangi alanlara izin verilmeyeceğini veya hangi alanların kullanılacağını seçebilir izin verdi."

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.