Drupal → Тонкая настройка прав материалов с помощью hook_node_access()

27.04.2012

Хук hook_node_access() предназначен для тонкой настройки прав пользователей при работе с материалами. Например с помощью него можно дать одному из пользователей права на редактирование определённого типа материалов (в то время, как другие пользователи такого права не имеют):

function mymodule_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;
  if ($type == 'page' && $op == 'update' && $account->uid == 123) {
    return NODE_ACCESS_ALLOW;
  }
}

или например запретить пользователям, зарегистрированным менее суток назад, создавать любые материалы:

function mymodule_node_access($node, $op, $account) {
  if ($op == 'create' && REQUEST_TIME - $account->created < 60*60*24) {
    return NODE_ACCESS_DENY;
  }
}

Замечания:

— хук не вызывается для юзера #1, т.е. ему всё разрешено
— хук не вызывается при просмотре списка нод, например в RSS, на странице node или в блоке последних материалов

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Для ещё более тонкой настройки существует система Grants, которой лучше сторониться архитектурно. Она влезает в запросы и к спискам нод и всё усложняет.

danylevskyi
27.04.2012, 13:12

и hook_node_access, и Node Grants - хорошие вещи!
А во Views UI есть настройка "Disable SQL rewriting", указывающая вьюхе не проверять права доступа.

Alex Milkovsky
25.11.2012, 17:07

существует ли аналог hook_node_access() для пользователей? например, hook_user_access() или hook_entity_access()

плюс хука node_access - прост в понимании
минус - он безтолковый по большому счету(запросам плевать на то что в нем. только на ноду не попадешь если он запрещает, при том что вьюшкой можно вывести что угодно и к нему будет доступ).
Решение hook_node_grants + hook_node_access_records

полезная ссылка - http://www.agileapproach.com/blog-entry/drupal-7-node-access-grants-loc…

Гость
09.09.2019, 20:58

А как можно скрыть только часть текста для анонимов в drupal 7

Добавить комментарий