xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Хук 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
Похожие записи

Комментарии RSS

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

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

существует ли аналог 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-lock...

Не в обиду xandeadx.
Ссылка на хорошее описание про настройку прав http://niklan.net/blog/63

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании