W jaki sposób użytkownik może uzyskać dostęp tylko do jednego określonego węzła, a nie do wszystkich węzłów tego typu?

10

Mam użytkownika z uprawnieniami do przeglądania i edycji określonego typu treści. Daje to wszystkim użytkownikom uprawnienia do przeglądania i edycji wszystkich węzłów tego typu. Ale tak naprawdę chcę utworzyć dla każdego użytkownika unikalny węzeł, aby tylko ten użytkownik mógł go wyświetlać i edytować. Jak mogę to zrobić w Drupal 7?

Ek Kosmos
źródło
1
Czy masz na myśli, jak możesz to zrobić za pomocą modułu lub jak możesz to zrobić, pisząc niezbędny kod?
kiamlaluno
Innym sposobem jest odmowa użycia węzła i rozszerzenie profilu użytkownika o pola.
ya.teck
Wygląda na to, że ten węzeł na użytkownika może spełniać pewne wymagania dotyczące profilu użytkownika. Czy musi to być osobny węzeł, czy też nie byłoby lepiej rozszerzyć samą jednostkę użytkownika o dodatkowe pola?
Alfred Armstrong
Drupal 7 usunął uprawnienia do wyświetlania węzłów na użytkownika. Możesz je przywrócić za pomocą tego modułu drupal.org/project/node_view_permissions
giorgio79
użyj modułu „nodeaccess” link to drupal.org/project/nodeaccess Chciałbym, żeby ci pomógł
Mahipal Purohit,

Odpowiedzi:

11

Korzystając z istniejącego modułu, możesz to zrobić za pomocą Content Access , który (w połączeniu z ACL ) pozwala ustawić uprawnienia dostępu do węzła dla każdego użytkownika.
Oznacza to, że musisz ręcznie ustawić uprawnienia dostępu dla każdego węzła.

Jeśli ręcznie utworzysz węzły, a następnie chcesz mieć pewność, że tylko użytkownik ustawiony jako właściciel węzła będzie mógł go wyświetlać (i edytować), możesz utworzyć moduł niestandardowy (co oznacza, że ​​moduł jest używane w Twojej witrynie) i zaimplementuj hook_node_access()w następujący sposób (kod został napisany, aby ułatwić czytanie):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Korzystając z tej implementacji przechwytywania, nie trzeba ręcznie edytować uprawnień dostępu przyznanych dla każdego węzła tworzonego typu treści. Zmiana właściciela węzła również byłaby łatwiejsza, ponieważ nie trzeba zmieniać uprawnień dostępu do tego węzła; kod automatycznie przyzna uprawnienia do aktualizacji i przeglądania użytkownikowi ustawionemu jako właściciel (lub autor) węzła.

kiamlaluno
źródło
5

Nie potrzebujesz do tego żadnego specjalnego modułu ani kodu niestandardowego. Po prostu utwórz ręcznie te węzły, ustaw odpowiednich użytkowników jako właścicieli (autorów) węzłów i ustaw uprawnienia do tego typu treści, aby edytować tylko własną zawartość (nie edytuj żadnej treści tego typu) i gotowe.

Petr Svehla
źródło
1

Mówisz o kontroli dostępu do węzła Drupal, co jest ogromnym tematem.

Wbudowana obsługa rdzenia dla kontroli dostępu do węzła jest raczej rzeczą oczywistą. Aby kontrolować dostęp do widoku węzła według roli, musisz użyć jakiegoś modułu kontroli dostępu do węzła. Na stronie Drupal.org znajduje się strona z listą wszystkich modułów dostępu do węzłów , z recenzją każdego z nich. Proponuję rzucić okiem na tę stronę, aby sprawdzić, czy możesz znaleźć odpowiedni moduł do kontroli dostępu.

Moduł Flexi Access wydaje się być modułem najbardziej zbliżonym do twoich wymagań, ponieważ jego podstawową funkcją jest umożliwienie kontroli dostępu dla poszczególnych użytkowników, a nie według roli lub terminu systematyki.

Jest to mały moduł, który umożliwia konfigurowanie list ACL (list kontroli dostępu) dla poszczególnych użytkowników. Jest to w zasadzie interfejs użytkownika dla modułu ACL , więc musisz go również zainstalować.

Brakuje niektórych funkcji bardziej zaawansowanych modułów kontroli dostępu, takich jak Content Access , ale jest aktywnie utrzymywany i obecnie nie ma żadnych otwartych błędów w kolejce problemów.

Ujawnienie: Jestem opiekunem Flexi Access.

Darmowe radykalne
źródło