it-swarm-eu.dev

Jak skrýt vlastní uživatelské pole v uživatelském profilu?

V Drupal 7), jaký je nejlepší způsob, jak zabránit tomu, aby jakýkoli uživatel bez oprávnění správce změnil pole vlastního profilu uživatele?

Případ použití: Vytvořil jsem uživatelské pole s názvem „ID zákazníka“, které nechci, aby se uživatel (žádný z mých skutečných zákazníků) změnil. Pole existuje pro můj vlastní odkaz a pro programové použití v jiných modulech. Nevadí mi, když uživatel vidí ID zákazníka, ale nemělo by to být možné upravit.

Mám přepsat šablonu stránky pro stránku profilu uživatele? Pokud ano, jak se změní šablona, ​​aby se pole stalo jen pro čtení nebo neviditelné?

Moc děkuji za Vaši pomoc!

Chris

20
ctlarsen

Myslím, že Field Permissions je to, co hledáte. Zde je citace (ze stránky projektu modulu):

... umožňuje správcům webu nastavit oprávnění na úrovni pole k úpravě, prohlížení a vytváření polí v jakékoli entitě.

Vlastnosti :

  • Povolte oprávnění pole pro jakoukoli entitu, nejen pro uzly.
  • Oprávnění polí založená na rolích, která umožňují různá zobrazení podle vzoru přístupu uživatele.
  • Oprávnění na úrovni autora umožňují prohlížení a úpravy polí na základě toho, kdo je vlastník entity.
  • Oprávnění pro každé pole nejsou ve výchozím nastavení povolena. Místo toho mohou správci tato oprávnění explicitně povolit pro pole, kde je tato funkce potřebná.
  • Přehled oprávnění polí
17
pasine

Chcete-li pole skrýt z formuláře uživatelského profilu, můžete nastavit #access vlastnost pole FALSE pomocí hook_form_FORMID_alter .

Následující úryvek skryje pole field_organisation z formuláře uživatelského profilu pro neadministrátory:

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

Viz také podobná otázka o drupalanswers

Pole můžete také skrýt ze stránky uživatelského profilu (nikoli z formuláře) pomocí template_preprocess_user_profile

Následující úryvek skryje pole field_organisation ze stránky uživatele pro neadministrátory:

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

Zdá se, že existuje modul nazvaný http://drupal.org/project/user_readonly "Modul umožňuje správci zabránit úpravě polí uživatelského účtu/profilu. Správce může vybrat, která pole budou zakázáno nebo která pole budou povolena. “

1
Jayesh Jose