Link vor anonymen Benutzern ausblenden


7

Wie kann ich einen bestimmten Link im Hauptmenü vor anonymen Benutzern verbergen, ohne das gesamte Menü unsichtbar zu machen?


Wenn diese Seite für anonyme Benutzer nicht sichtbar ist, wird der Link automatisch entfernt.
j2r

Und wie kann ich konfigurieren, wer die Seite anzeigt?
Walker

1
Für welche Version von Drupal ist das?
Cravecode

Ich benutze Drupal 7. Version 7.14 um genau zu sein.
Walker

Antworten:


5

Sie konfigurieren die Sichtbarkeit von Links nicht so sehr direkt, sondern konfigurieren die Berechtigungen bestimmter Inhaltstypen. Abhängig von den Berechtigungen des Inhalts, auf den der Link verweist, ist jeder Link zu Inhalten eines bestimmten Typs entweder sichtbar oder unsichtbar .

Sie können die Berechtigungen für einen bestimmten Inhalt konfigurieren, indem Sie im Abschnitt Berechtigungen in Administration den Inhaltstyp suchen, für den Sie die Berechtigungen einschränken möchten, und diese Berechtigungen (Kontrollkästchen zum Anzeigen, Erstellen, Bearbeiten usw.) basierend konfigurieren auf Rolle angemessen.

Wenn Sie konfigurieren den Zugriff auf bestimmte Knoten / content benötigen, dann könnten Sie einen Blick auf haben Content Access .


Das ist die Natur des Problems. Einige Seiten müssen für anonyme Benutzer sichtbar sein, damit ich sie nicht einfach nach Inhaltstyp blockieren kann. Gibt es keine Möglichkeit, den Menüblock so zu konfigurieren, dass nur bestimmte Links zu angemeldeten Personen angezeigt werden?
Walker

Meine Antwort wurde mit einem Link zu einem Modul aktualisiert, das Ihnen helfen kann.
Lester Peabody

@Lester Ich glaube nicht, dass dies eine Zugriffskontrolle auf Knotenebene ermöglicht. Ich könnte mich irren, aber es scheint, dass man einen bestimmten Inhaltstyp für die Knoten erstellen muss, die Zugriffskontrolle benötigen. Dies ist jedoch bereits in Drupal integriert, sodass ich etwas verwirrt bin, was dieses Modul bewirkt. Ich werde das ausprobieren müssen. Danke, dass du Bruder geteilt hast.
Stefgosselin

Wenn Sie auf die Miniaturansicht für das Projekt klicken, können Sie ein Element "Zugriffseinstellungen pro Inhaltsknoten" abhaken. Es hört sich so an, als würde neben "Ansicht" eine weitere Registerkarte hinzugefügt, z. B. "Berechtigungen" oder ähnliches, auf der Sie Dauerwellen nur für diesen Knoten konfigurieren können. Aber ja, ich müsste es auch selbst versuchen, bevor ich es tatsächlich bestätigen könnte.
Lester Peabody

Krank, ich muss diesen in meiner kleinen Trickkiste verstauen.
Lester Peabody

5

Sie können dies leicht mit etwas Ellbogenfett tun !

Hierfür gibt es zwei Hooks, je nachdem, ob Ihr Menü von einem Modul oder von Drupal selbst generiert wird. In einem benutzerdefinierten Modul würden Sie entweder hook_menu oder hook_menu_alter verwenden .

Diese beiden Hooks haben einen Parameter, mit access callbackdem Sie ihm eine Funktion geben können, die ein BOOL zurückgibt. Wenn die Funktion TRUE zurückgibt, ist der Zugriff zulässig und der Menülink wird angezeigt. Wenn FALSE zurückgegeben wird, ist der Zugriff nicht zulässig und der Menülink wird nicht angezeigt.

//Small example
function <your_module>_menu_alter(&$items) {
  // Example - disallow access for anonymous to node 15 from custom module
  $items['node/15']['access callback'] = '_accessCheck';
}

Weiter unten definieren Sie den Rückruf:

function _acccessCheck(){
  global $user;
  if ($user->uid) { // user is logged in
    return TRUE;
  } // Anonymous
    return FALSE;
}

Hoffe das hilft, viel Spaß beim Codieren!


3

Sie können Benutzer einschränken, um einige der Menü-Links zu sehen, indem Sie Menü pro Rollenmodul verwenden .
Sie können den Zugriff auf Menüelemente basierend auf Benutzerrollen einschränken. Sie können also einen bestimmten Menülink vor einer bestimmten Rolle ausblenden und anderen anzeigen.


Blendet es den Menü-Link aus oder schränkt es den Zugriff auf die Seite ein, auf die es verweist?
Lester Peabody

@LesterPeabody Es verbirgt den Menü-Link. Das Ausblenden des Menü-Links ist so gut wie das Halten der Benutzer, um diese Seite zu besuchen. Ich bin nicht sicher, ob Benutzer nur die URL erraten könnten, um die Seite zu besuchen
;-)

Ich habe nur ernsthafte Probleme damit aus Sicherheitsgründen. Ich verstehe den Vorteil nicht, einen Link nur auszublenden, wenn er noch auf die Seite zugreifen kann, auf die er verweist. Das ergibt für mich einfach keinen Sinn.
Lester Peabody

1
Das Ausblenden eines Menüelements ohne Einschränkung des Zugriffs hat legitime Anwendungsfälle. Das Ausblenden ist jedoch kein Ersatz für das Einschränken, wenn Sie eingeschränkten Inhalt benötigen. Das ist schlecht. Es sind nicht nur Benutzer, die die URL erraten (was übrigens einfach ist), sondern auch Suchmaschinen, die Ihre Seiten indizieren, wenn sie nicht eingeschränkt sind. Wenn Ihr Inhalt sensibel ist, ist dies sehr wichtig. - Die Frage besagte jedoch nie, dass der Zugriff auf Inhalte eingeschränkt werden sollte.
Rooby

2

Sie können es manuell tun. Vielleicht ist es nicht die beste Form, aber es kann Ihr Problem vorübergehend beheben.
Sie können Ihrer Hauptdatei eine JavaScript-Datei hinzufügen .tpl.php. In dieser Datei können Sie mit den übergeordneten und untergeordneten Elementen Ihres Codes (http://api.jquery.com/parent) mithilfe von JavaScript-Methoden spielen. Also müssen Sie zuerst Ihr Element durch etwas wie #idelement(es kann im Menücode zwischen allen Blättern des Menüs positioniert sein) erhalten und dann das Element durch ausblenden .hide(). Außerdem müssen Sie Ihrem Code hinzufügen, dass die JavaScript-Datei .tpl.phpnur dann hinzugefügt wird, wenn der Benutzer angemeldet ist.

if(user_is_logged_in()){
   drupal_add_js(yourjSFile);
}    

Ich wiederhole, das ist eine vorübergehende Lösung.
Wenn Sie Ihren Code oder Ihr Element im Menü geändert haben, muss auch diese Lösung geändert werden.
Dadurch wird nur ein Menüelement und nicht die Inhaltstypen ausgeblendet.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.