it-swarm.com.de

HOOK_menu_alter zum Entfernen von Hauptmenüelementen für bestimmte Benutzerrollen

Ich versuche, dem Hauptmenü nur für die Benutzerrolle "Supervisor" einen Menülink (admin/people/create? Operator = 1) hinzuzufügen.

Ich habe versucht, dies zu tun:

function mymodule_menu_alter(&$items) {

 if(in_array('Supervisor', array_values($user->roles)))
   $items['admin/people/create?operator=1']['type'] = {idk what goes here};

}

Aber ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin.

4
Mike

Ich nehme an, Sie haben einen Link zum Hauptmenü hinzugefügt, und Sie möchten ihn nur anzeigen lassen, wenn der Benutzer die richtige Berechtigung hat. In diesem Fall ist hook_menu_alter() nicht der richtige Hook, um Folgendes zu implementieren:

  • Es wird nicht verwendet, um die zu diesem Menü hinzugefügten Links zu überschreiben
  • Es ist nicht möglich, admin/people/create? Operator = 1 als Pfad für den Menülink in hook_menu() oder hook_menu_alter() zu verwenden

Nachdem Sie den Link zum Hauptmenü hinzugefügt haben, müssen Sie ein Modul aktivieren, das den folgenden Code enthält.

function mymodule_menu_link_alter(&$link) {
  if ($link['link_path'] == 'admin/people/create?operator=1' && $link['module'] == 'menu') {
    $link['options']['alter'] = TRUE;
  }    
}

function mymodule_translated_menu_link_alter(&$link) {
  if ($link['link_path'] == 'admin/people/create?operator=1' && $link['module'] == 'menu' && user_access('use advanced user creation link')) {
    $link['hidden'] = 1;
  }
}

function mymodule_permission() {
  return array(
    'use advanced user creation link' => array(
      'title' => t('Use advanced user creation link'), 
    ),
  );
}

Mit dem Teil $link['module'] == 'menu' Können Sie den Link ändern, den Sie manuell im Hauptmenü hinzugefügt haben, und nicht andere Links (d. H. Von einem Modul hinzugefügt). In der ersten Funktion weist $link['options']['alter'] = TRUE Drupal an, hook_translated_menu_link_alter () für diesen Link aufzurufen; in der zweiten Funktion, die tatsächlich eine Implementierung von hook_translated_menu_link_alter() ist Während die erste Funktion die Implementierung von hook_menu_link_alter () ist, verbirgt $link['hidden'] = 1 das Menü tatsächlich für den aktuell angemeldeten Benutzer.
Anstelle von "Link zur erweiterten Benutzererstellung verwenden" können Sie eine andere Berechtigungszeichenfolge verwenden. Solange die Berechtigung nur für die Rollen erteilt wird, die sie benötigen, und eindeutig ist, können Sie eine beliebige Zeichenfolge verwenden.

Ich habe keine gefunden, aber wenn es ein Modul gibt, das die zum Hauptmenü hinzugefügten Links für Benutzer mit bestimmten Rollen sichtbar macht, würde ich das stattdessen verwenden.

Nebenbei bemerkt ist die Suche nach einer Berechtigung der Überprüfung der Rollen des angemeldeten Benutzers vorzuziehen. Der Grund dafür ist, dass der Code beim Überprüfen auf Berechtigungen immer if (user_access('permission to check')) {} ähnelt, unabhängig davon, welche Rollen über diese Berechtigung verfügen. Wenn Sie nach Rollen suchen, kann sich der Code von if (in_array('supervisor', array_values($user->roles))) {} in if (in_array('supervisor', array_values($user->roles)) || in_array('another role', array_values($user->roles))) {} ändern. Mit anderen Worten, Sie codieren etwas fest, das Sie in Zukunft ändern könnten.

11
kiamlaluno

Es gibt das Modul Menü pro Rolle , mit dem Sie die Rollen definieren können, die für jeden Menüpunkt zulässig sind. Sie definieren entweder, für welche Rollen es angezeigt werden soll oder für welche Rollen es ausgeblendet werden soll. Für andere Rollen bleibt die Standardeinstellung erhalten. Hier ist ein Screenshot des Einstellungsbildschirms:

Menu item settings screen

0
Druvision