Come nascondere un campo utente personalizzato nel profilo utente?


20

In Drupal 7, qual è il modo migliore per impedire a qualsiasi utente non amministrativo di modificare un campo del profilo utente personalizzato?

Caso d'uso: ho creato un campo utente chiamato "ID cliente" che non voglio che l'utente (nessuno dei miei clienti effettivi) cambi. Il campo esiste per mio riferimento e per uso programmatico in altri moduli. Non mi dispiace che l'utente visualizzi l'ID cliente, ma non dovrebbero essere in grado di modificarlo.

Devo sovrascrivere il modello di pagina per la pagina del profilo utente? In tal caso, come viene modificato il modello per rendere un campo di sola lettura o invisibile?

Grazie mille per il tuo aiuto!

Chris

Risposte:


17

Penso che Field Field sia quello che stai cercando. Ecco una citazione al riguardo (dalla pagina del progetto del modulo):

... consente agli amministratori del sito di impostare autorizzazioni a livello di campo per modificare, visualizzare e creare campi su qualsiasi entità.

Caratteristiche :

  • Abilita le autorizzazioni di campo su qualsiasi entità, non solo sui nodi.
  • Autorizzazioni di campo basate sul ruolo che consentono diversi schemi di visualizzazione in base all'accesso dell'utente.
  • Le autorizzazioni a livello di autore consentono la visualizzazione e la modifica dei campi in base a chi è il proprietario dell'entità.
  • Le autorizzazioni per ciascun campo non sono abilitate per impostazione predefinita. Al contrario, gli amministratori possono abilitare esplicitamente queste autorizzazioni per i campi in cui è necessaria questa funzionalità.
  • Panoramica delle autorizzazioni sul campo

Grazie, notme! Ho installato il modulo Autorizzazioni campo (la versione alfa è la più recente, il che mi rende un po 'nervoso, ma comunque) e nasconde il campo all'utente quando l'utente visualizza il suo profilo. Dopo aver sperimentato tutte le impostazioni del modulo, non sembra esserci un modo per rendere il campo visibile ma di sola lettura. Non è un requisito assoluto, ma sarebbe bello avere.
ctlarsen,

L'impostazione di un campo per essere visibile significa che un campo di testo viene mostrato come testo normale. Se vuoi mantenere il campo di testo e impostarlo come di sola lettura, immagino che devi usare un hook_form_alter sul tuo modulo.
pasine,

Grazie ancora, notme. Prenderò il percorso hook_form_alter e vedrò dove mi porta. Sembra che sia il modo migliore per andare.
ctlarsen,

Il modulo Field Permissionsfunziona bene con Drupal 8 ma potresti nascondere solo campi personalizzati penso (avevo bisogno di inserire anche il nome utente)
Sébastien Gicquel

5

Per nascondere il campo dal modulo del profilo utente, è possibile impostare la #accessproprietà di un campo su FALSE usando hook_form_FORMID_alter.

Il frammento seguente nasconde il campo field_organisationdal modulo del profilo utente per i non amministratori:

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

Vedi anche questa domanda simile su drupalanswers

Puoi anche nascondere il campo dalla pagina del profilo utente (non dal modulo) usando template_preprocess_user_profile

Il frammento seguente nasconde il campo field_organisationdalla pagina utente per i non amministratori:

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

1

Sembra che ci sia un modulo chiamato http://drupal.org/project/user_readonly "Il modulo consente a un amministratore di impedire la modifica dei campi account / profilo utente. L'amministratore può selezionare quali campi saranno vietati o quali campi saranno permesso."

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.