Wie kann der direkte Zugriff auf die Knoten eingeschränkt werden?


12

Wie kann man den direkten Zugriff auf die Knoten einschränken, aber nur zulassen, dass Ansichten auf das erforderliche Feld des jeweiligen Knotentyps zugreifen?

Zum Beispiel schieben wir in Views Slideshow das Bildfeld, das zu einem bestimmten Knotentyp gehört. Wir möchten jedoch nicht, dass Suchmaschinen auf die Knoten zugreifen und dass Besucher auf die Knoten zugreifen, die zu diesem Knotentyp gehören.

Irgendwelche Vorschläge?

Antworten:


12

Eine einfache Lösung wäre, die Knoten, auf die nicht zugegriffen werden soll, nicht zu veröffentlichen. Ansichten können weiterhin die Daten von diesen Knoten abrufen.


1
Zu einfach? Es gibt keine "zu einfache Lösung". Komplexität ist an sich kein Ziel, oder? Vielleicht löst Googletorps Antwort Ihr spezifisches Problem nicht, aber in diesem Fall müssen Sie ausführlicher sein und erklären, warum nicht.
Marcvangend

@marcvangend Obwohl es spät ist, aber ich habe erkannt, dass dies nicht die Antwort auf meine Frage ist. Hoffe, jemand kann eine bessere Antwort hinzufügen
Fahad Ur Rehman

@Fahad Um bessere Antworten zu erhalten, müssen Sie bessere Fragen stellen. Googletorps Antwort scheint mir eine gute Lösung zu sein, und die positiven Stimmen scheinen übereinzustimmen. Wenn das Problem dadurch nicht behoben wird, bearbeiten Sie Ihre Frage und fügen Sie alle relevanten Details hinzu.
Marcvangend

@marcvangend tatsächlich wurde mein Problem gelöst und ich akzeptierte die Antwort früher, aber im Lichte Ihres Kommentars. Googletorps hat ein sehr hohes Ansehen, bekommt keinen Unterschied, wenn ich seine Antwort akzeptiere oder nicht akzeptiere. Er lieferte eine ausgezeichnete Alternativlösung, für die ich ihn ebenfalls abgestimmt habe.
Fahad Ur Rehman

@Fahad Mit der Annahme einer Antwort sagst du: Diese Antwort hat mein Problem gelöst. Es ist eine aussagekräftige Aussage, die für Besucher sehr nützlich ist, um herauszufinden, ob eine Antwort nützlich ist oder nicht. Wenn meine Antwort Ihr Problem nicht gelöst hat, sollten Sie Ihre Frage bearbeiten und einige Details dazu posten, warum meine Lösung für Sie nicht funktioniert. Fügen Sie, wie Marcvangend sagte, weitere Details hinzu.
googletorp

3

Wenn wir die Veröffentlichung der von Benutzer1 hinzugefügten Knoten aufheben, können sie von keinem anderen Benutzer bearbeitet werden, selbst wenn der Benutzer die Berechtigung zum Bearbeiten des Inhalts dieses Inhaltstyps hat.

Die Knotenseitenansicht einschränken scheint eine bessere Möglichkeit zu sein, den direkten Zugriff auf Knoten eines bestimmten Inhaltstyps einzuschränken.

Die Verwendung ist auch recht einfach. Sie müssen nur dieses Modul aktivieren und die Berechtigungen für die Knoten konfigurieren, auf die direkt wie gewohnt zugegriffen werden kann.

http://drupal.org/project/restrict_node_page_view

Von der Projektseite:

Haben Sie schon einmal einen Diashow-Knotentyp verwendet, der veröffentlicht werden muss, aber nicht möchte, dass der Knoten über den Pfad node / XXX für sich allein erreichbar ist? Dieses Modul ist für Sie!

Mit diesem Modul können Sie den direkten Zugriff auf Knotenseiten (node ​​/ XXX) basierend auf Knotentypen und Berechtigungen deaktivieren.

Aktivieren Sie das Modul und vergessen Sie nicht, Ihre Berechtigungen zu konfigurieren.


1

Ein anderes Modul, das das Gleiche tut, aber über mehr Funktionen verfügt.

Kaninchenbau

Maintainer dieses Projekts bitten den Maintainer, die Knotenseitenansicht einzuschränken, um Projekte in Problemen zusammenzuführen.

Vorteile gegenüber "Node Page View einschränken":

  • Dieselbe Hauptfunktionalität auf dem Knoten, aber erweiterbar für Benutzer / Dateien / Taxonomiebegriffe
  • Kann in Ihrem Modul verwendet werden
  • Kann global für den Inhaltstyp oder für jeden Inhalt sein
  • Mehr auf der Projektseite ...

Nachteil gegenüber "Node Page View einschränken":

  • Mehr Code also möglicherweise weniger effektiv (brauche Tests, nicht bewiesen)

1

Sie sollten verwenden node_access(), es gibt bestimmte Optionen, die Sie leicht mit implementieren können hook_node_access(). Durch die Implementierung node_access()können Sie entscheiden, wer auf einen Knoten zugreifen und wer einen solchen Knoten erstellen, löschen, bearbeiten oder aktualisieren kann. Views können jedoch immer noch Daten von diesen Knoten abrufen.

hook_node_access () , node_access ()


0

Inspiriert von https://www.drupal.org/project/restrict_node_page_view können Sie selbst ein kleines Modul schreiben:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}

Dieses Modul wurde bereits vor einigen Jahren erwähnt. Könntest du erklären, was deine Antwort zu dem Thema bringt?
Mołot

@ Mołot - ... um selbst ein Modul zu schreiben. Bearbeitete Antwort
Leymannx

0

Mit dem Modul Regeln können Sie eine Regel implementieren, die ungefähr so ​​aussieht:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Die obige Regel berücksichtigt (noch) nicht, dass die "Aktion" nur für ausgewählte Rollen angewendet wird (z. B. damit Administratoren diese Pfade weiterhin zum Anzeigen eines Knotens verwenden können). Aber für alle, die ein wenig mit dem Modul Regeln vertraut sind, ist dies eine einfache "Bedingung", die hinzugefügt werden muss ...

Um mit dieser Regel auf Ihrer eigenen Site zu experimentieren, kopieren Sie einfach den gesamten obigen Regelcode und fügen Sie ihn in eine neue Regel auf Ihrer eigenen Site ein, die über die Funktion "Importieren" erstellt wurde. Dann weiter bearbeiten / verfeinern, damit es in Ihre eigene Umgebung passt (z. B. wird die Meldung "Sorry, ..." angezeigt).

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.