Wie verstecke ich ein benutzerdefiniertes Benutzerfeld im Benutzerprofil?

20

Wie kann in Drupal 7 verhindert werden, dass Benutzer ohne Administratorrechte ein benutzerdefiniertes Benutzerprofilfeld ändern?

Anwendungsfall: Ich habe ein Benutzerfeld mit dem Namen "Kunden-ID" erstellt, das der Benutzer (einer meiner tatsächlichen Kunden) nicht ändern soll. Das Feld existiert zu meiner eigenen Referenz und zur programmatischen Verwendung in anderen Modulen. Ich habe nichts dagegen, dass der Benutzer die Kunden-ID sieht, aber er sollte sie nicht bearbeiten können.

Sollte ich die Seitenvorlage für die Benutzerprofilseite überschreiben? Wenn ja, wie wird die Vorlage geändert, um ein Feld schreibgeschützt oder unsichtbar zu machen?

Vielen Dank für Ihre Hilfe!

Chris

ctlarsen
quelle

Antworten:

17

Ich denke, Sie suchen nach Feldberechtigungen . Hier ist ein Zitat darüber (von der Projektseite des Moduls):

... ermöglicht Site-Administratoren das Festlegen von Berechtigungen auf Feldebene zum Bearbeiten, Anzeigen und Erstellen von Feldern für eine beliebige Entität.

Eigenschaften :

  • Aktivieren Sie die Feldberechtigungen für alle Entitäten, nicht nur für Knoten.
  • Rollenbasierte Feldberechtigungen, die je nach Zugriff des Benutzers unterschiedliche Anzeigemuster ermöglichen.
  • Berechtigungen auf Autorenebene ermöglichen das Anzeigen und Bearbeiten von Feldern basierend auf dem Eigentümer der Entität.
  • Berechtigungen für jedes Feld sind standardmäßig nicht aktiviert. Stattdessen können Administratoren diese Berechtigungen explizit für die Felder aktivieren, in denen diese Funktion erforderlich ist.
  • Übersicht über die Feldberechtigungen
Pasine
quelle
Danke, nicht me! Ich habe das Feldberechtigungsmodul installiert (Alpha-Version ist die neueste, was mich etwas nervös macht, aber was auch immer) und es verbirgt das Feld vor dem Benutzer, wenn der Benutzer sein Profil anzeigt. Nachdem Sie mit allen Einstellungen des Moduls experimentiert haben, scheint es keine Möglichkeit zu geben, das Feld sichtbar, aber schreibgeschützt zu machen. Keine zwingende Voraussetzung, wäre aber schön zu haben.
Ctlarsen
Wenn Sie ein Feld als sichtbar festlegen, wird ein Textfeld als einfacher Text angezeigt. Wenn Sie das Textfeld behalten und als schreibgeschützt festlegen möchten, müssen Sie in Ihrem Formular einen hook_form_alter verwenden.
Pasine
Nochmals vielen Dank, notme. Ich werde den hook_form_alter-Weg nehmen und sehen, wohin mich das führt. Es hört sich so an, als wäre es der beste Weg.
ctlarsen
Das Modul Field Permissionsfunktioniert gut mit Drupal 8, aber Sie konnten nur benutzerdefinierte Felder verbergen, denke ich (ich musste auch Benutzername hyde)
Sébastien Gicquel
5

Um das Feld aus dem Benutzerprofilformular auszublenden, können Sie die #accessEigenschaft eines Felds mit auf FALSE setzen hook_form_FORMID_alter.

Das folgende Snippet verbirgt das Feld field_organisationvor dem Benutzerprofil für Nicht-Administratoren:

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

Siehe auch diese ähnliche Frage zu Drupalanswers

Sie können das Feld auch mithilfe von template_preprocess_user_profile auf der Benutzerprofilseite (nicht im Formular) ausblenden

Das folgende Snippet verbirgt das Feld field_organisationvor der Benutzerseite für Nichtadministratoren:

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

Anscheinend gibt es ein Modul mit dem Namen http://drupal.org/project/user_readonly. "Das Modul ermöglicht einem Administrator, das Ändern von Benutzerkonto- / Profilfeldern zu verhindern. Der Administrator kann auswählen, welche Felder nicht zulässig sind oder welche Felder nicht zulässig sind dürfen."

Jayesh Jose
quelle