Jak ograniczyć bezpośredni dostęp do węzłów?

12

Jak ograniczyć bezpośredni dostęp do węzłów, ale po prostu zezwolić widokom na dostęp do wymaganego pola określonego typu węzła?

Na przykład w Widoku pokazu slajdów przesuwamy pole obrazu, które należy do określonego typu węzła. Ale nie chcemy, aby wyszukiwarki miały dostęp, a odwiedzający mieli dostęp do węzłów należących do tego typu węzłów.

Jakieś sugestie?

Fahad Ur Rehman
źródło

Odpowiedzi:

12

Prostym rozwiązaniem byłoby nie publikowanie węzłów, które nie powinny być dostępne. Widoki nadal mogą pobierać dane z tych węzłów.

googletorp
źródło
1
Zbyt proste? Nie ma czegoś takiego jak „zbyt proste rozwiązanie”. Złożoność nie jest celem samym w sobie, prawda? Być może odpowiedź Googletorp nie rozwiązuje konkretnego problemu, ale w takim przypadku będziesz musiał być bardziej rozbudowany i wyjaśnić, dlaczego nie.
marcvangend,
@marcvangend Choć jest późno, ale zdałem sobie sprawę, że to nie jest odpowiedź na moje pytanie. Mam nadzieję, że ktoś doda lepszą odpowiedź
Fahad Ur Rehman,
@Fahad Aby uzyskać lepsze odpowiedzi, musisz zadawać lepsze pytania. Odpowiedź Googletorp wydaje mi się dobrym rozwiązaniem, a głosowanie wydaje się zgodne. Jeśli to nie rozwiąże twojego problemu, wejdź i edytuj swoje pytanie, dodając wszystkie istotne szczegóły.
marcvangend,
@marcvangend faktycznie mój problem został rozwiązany i wcześniej zaakceptowałem odpowiedź, ale w świetle twojego komentarza. Googletorps ma bardzo wysoką reputację, nie ma różnicy, jeśli zaakceptuję jego odpowiedź. Zapewnił doskonałe alternatywne rozwiązanie, na które też go głosowałem.
Fahad Ur Rehman,
@Fahad Przyjmując odpowiedź, którą mówisz: ta odpowiedź rozwiązała mój problem. To potężne stwierdzenie i bardzo przydatne dla odwiedzających, aby dowiedzieć się, czy odpowiedź jest przydatna, czy nie. Jeśli moja odpowiedź nie rozwiązała twojego problemu, powinieneś edytować swoje pytanie i opublikować szczegółowe informacje na temat tego, dlaczego moje rozwiązanie nie działa dla ciebie i jak powiedział marcvangend, dodaj więcej szczegółów.
googletorp
3

Jeśli cofniemy publikację węzłów dodanych przez użytkownika1, nie będą one edytowalne przez żadnego innego użytkownika, nawet jeśli użytkownik ma prawa do edycji treści tego typu treści.

Ograniczanie widoku strony węzła wydaje się lepszym sposobem ograniczenia bezpośredniego dostępu do dowolnych węzłów określonego typu treści.

Użycie jest również dość proste, wystarczy włączyć ten moduł i skonfigurować uprawnienia dla węzłów, które są bezpośrednio dostępne jak zwykle.

http://drupal.org/project/restrict_node_page_view

Ze strony projektu:

Czy używałeś kiedyś typu węzła pokazu slajdów, który musisz opublikować, ale nie chcesz, aby węzeł był dostępny sam, używając ścieżki węzła / XXX? Ten moduł jest dla Ciebie!

Za pomocą tego modułu możesz wyłączyć bezpośredni dostęp do stron węzłów (węzeł / XXX) na podstawie typów węzłów i uprawnień.

Włącz moduł i nie zapomnij skonfigurować swoich uprawnień.

Fahad Ur Rehman
źródło
1

Kolejny moduł, który robi to samo, ale ma więcej funkcji.

Królicza nora

Opiekunowie tego projektu proszą Opiekun „Ogranicz widok strony węzła”, aby połączyć projekty w problemach.

Zalety w stosunku do „Ogranicz widok strony w węźle”:

  • Ta sama główna funkcjonalność w węźle, ale rozszerzalna na warunki użytkowników / plików / taksonomii
  • Może być używany w twoim module
  • Może być globalny dla typu zawartości lub dla każdej zawartości
  • Zobacz więcej na stronie projektu ...

Wada w stosunku do „Ogranicz widok strony w węźle”:

  • Więcej kodu, więc być może mniej efektywny (potrzebne testy, niepotwierdzone)
Payou
źródło
1

powinieneś użyć node_access(), są pewne opcje, które możesz łatwo wdrożyć za pomocą hook_node_access(). Implementacja node_access()umożliwia podjęcie decyzji, kto może uzyskać dostęp do węzła i kto może tworzyć, usuwać, edytować lub aktualizować taki węzeł. Widoki mogą jednak nadal pobierać dane z tych węzłów.

hook_node_access () , node_access ()

gauravjeet
źródło
0

Zainspirowany https://www.drupal.org/project/restrict_node_page_view możesz sam napisać mały moduł:

/**
 * 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;
}
leymannx
źródło
Ten moduł został już wspomniany kilka lat temu. Czy możesz wyjaśnić, co nowego wnosi twoja odpowiedź na ten temat?
Mołot
@ Mołot - ... aby napisać moduł samodzielnie. Edytowana odpowiedź.
leymannx,
0

Za pomocą modułu Reguły możesz zaimplementować regułę podobną do tej:

{ "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" } }
    ]
  }
}

Powyższa reguła (jeszcze) nie bierze pod uwagę jedynie zastosowania „akcji” tylko dla wybranych ról (np. Aby administratorzy mogli nadal używać tych ścieżek do przeglądania węzła). Ale dla każdego, kto jest trochę zaznajomiony z modułem Reguły, jest to prosty „Warunek”, aby dodać ...

Aby eksperymentować z tą regułą we własnej witrynie, po prostu skopiuj cały kod Reguły powyżej i wklej go w nowej Regule we własnej witrynie utworzonej za pomocą funkcji „Importuj”. Następnie dokonaj dalszej edycji / poprawiania, aby dopasować go do własnego środowiska (np. Wyświetlany komunikat „Przepraszamy, ...”).

Pierre.Vriens
źródło