Как пользователь может получить доступ только к одному конкретному узлу, а не ко всем узлам этого типа?

10

У меня есть пользователь с правами на просмотр и редактирование определенного типа контента. Это дает право всем пользователям просматривать и редактировать все узлы этого типа. Но на самом деле я хочу создать для каждого пользователя уникальный узел, чтобы его мог просматривать и редактировать только этот пользователь. Как я могу сделать это в Drupal 7?

Эк Космос
источник
1
Вы имеете в виду, как вы можете сделать это с помощью модуля, или как вы можете сделать это, написав необходимый код?
kiamlaluno
Другой способ - отказаться от использования узла и расширить профиль пользователя по полям.
я.тек
Похоже, этот узел для каждого пользователя может соответствовать какому-то требованию профиля пользователя. Должен ли это быть отдельный узел, или не лучше ли дополнить сам пользовательский объект дополнительными полями?
Альфред Армстронг
Drupal 7 удалил права просмотра узлов для каждого пользователя. Вы можете вернуть их с помощью этого модуля. Drupal.org/project/node_view_permissions
giorgio79
используйте модуль "nodeaccess", ссылка - drupal.org/project/nodeaccess, я хочу, чтобы он вам помог
Махипал Пурохит

Ответы:

11

Используя существующий модуль, вы можете сделать это с помощью Content Access , который (при совместном использовании ACL ) позволяет устанавливать разрешения для доступа к узлу для каждого пользователя.
Это означает, что вам необходимо установить права доступа вручную для каждого узла.

Если вы вручную создаете узлы, а затем хотите быть уверены, что только пользователь, установленный в качестве владельца узла, может просматривать (и редактировать) его, то вы можете создать собственный модуль (что означает модуль, который используется для вашего сайта), и реализовать hook_node_access()следующим образом (код был написан для облегчения чтения):

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;
}

Используя эту реализацию ловушки, вам не нужно вручную редактировать права доступа, предоставленные для каждого узла того типа контента, который вы создаете. Смена владельца узла также будет проще, поскольку вам не нужно изменять права доступа для этого узла; код автоматически предоставит права на обновление и просмотр пользователю, указанному как владелец (или автор) узла.

киамлалуно
источник
5

Вам не нужен специальный модуль или специальный код для этого. Просто создайте вручную эти узлы, назначьте соответствующих пользователей в качестве владельца (автора) узлов и установите разрешения для этого типа контента, чтобы редактировать только собственный контент (не редактировать контент такого типа), и все готово.

Петр свехла
источник
1

То, о чем вы говорите, это контроль доступа к узлам Drupal, который является огромной темой.

Встроенная в ядро ​​поддержка управления доступом к узлу довольно проста, и для управления доступом для просмотра узла по роли необходимо использовать какой-то модуль управления доступом к узлу. На Drupal.org есть страница со списком всех модулей доступа к узлам с кратким обзором каждого из них. Я предлагаю вам взглянуть на эту страницу и посмотреть, сможете ли вы найти подходящий модуль для контроля доступа.

Модуль Flexi Access , по-видимому, является модулем, наиболее близким к вашим требованиям, поскольку его основная функция - позволить вам контролировать доступ для отдельных пользователей, а не по роли или по таксономии.

Это небольшой модуль, который позволяет настраивать ACL (списки контроля доступа) для отдельных пользователей. Это в основном пользовательский интерфейс для модуля ACL , поэтому его также необходимо установить.

В нем отсутствуют некоторые функции более продвинутых модулей контроля доступа, таких как Content Access , но он активно поддерживается, и в его очереди ошибок в настоящее время нет открытых ошибок.

Раскрытие информации: я поддерживаю Flexi Access.

Свободный радикал
источник