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

drupal.stackexchange https://drupal.stackexchange.com/questions/905

  •  16-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Используя существующий модуль, вы можете сделать это с Контент доступ, который (при использовании вместе 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;
}

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

Другие советы

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

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

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

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

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

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

Раскрытие: я являюсь сопровождающим доступом Flexi.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top