Есть тип материала 'diary'. Нужно разрешить доступ к нему только автору ноды.
Создаем простой модуль 'diaryaccess', в котором выполняем хук hook_node_access.
<?php
/**
* Implements hook_node_access().
*
*/
function diaryaccess_node_access($node, $op, $account) {
// If $node is a string, the node has not yet been created. We don't care
// about that case.
if (is_string($node)) {
return NODE_ACCESS_IGNORE;
}
if ($node->type == 'diary' and $node->uid != $account->uid) {
return NODE_ACCESS_DENY;
}
return
NODE_ACCESS_IGNORE;
}?>
Комментарии
А не проще через "Разрешение ролей"? "Edit own 'diary'", ну не дословно, но думаю понятно. А на остальной edit галку не ставить...
Если вы заметили, в настройках доступа можно установить права на что угодно, кроме "view", т.е. просмотра. В моем случае нужно запретить именно просмотр.
А, не учел:) Просто не было таких задач, можно извратиться с "content_permissions", но хуком проще:)
Скоро пригодится. Спасибо.
Модули Veiws, Panels и можно это делать через админку.
Видео урок
Не понял смысл первого IF
<?php
if (is_string($node)) {
return NODE_ACCESS_IGNORE;
}
?>
Если второй IF не сработает, все равно возвратиться NODE_ACCESS_IGNORE
Как это использовать? Куда нужно вставить приведенный код?
там же написано в свой модуль
а для шестерки есть аналогичное решение?
я вижу слово "модуль"
но нормальному человеку (нормальный - это я) не понятно, в какой именно файл это нужно вставить и как сделать, чтобы работало на конкретном сайте
Так гуглите как модули создавать... и добавляте туда функцию.
Создаете папку "diaryaccess".
В ней создаете файл diaryaccess.info с содержимым:
description = Запрещает доступ к записям дневника всем кроме автора.
core = 7.x
files[] = diaryaccess.module
Создаете файл diaryaccess.module, в который помещаете приведенный в теме код.
Закачиваете папку в /sites/all/modules/
Заходите в раздел "Модули" и включаете модуль diaryaccess.
Что-то не сработало. Сделал все в точности так. Только машинное имя "diary" поменял на свое. Материалы остались доступны всем...
Если обратиться по адресу самого материала, то выходит сообщение о запрете доступа, но во вьювсах материалы по автору не фильтруются и в списках таксономии тизеры тоже выходят по всем авторам без ограничений.
Т.е. модуль занимается не доступом к материалам, а фильтрацией вывода. Можно реализовать средствами Вьювс
Поставил дев-версию модуля "Content Access". Недоделанная. Вьювс контролирует, а через термины таксономии все показывает без ограничений.
так подобные модули с нодами работают а не с вьюхами... и терминами
т.е. тизеры и вывод их где либо всегда доступны если вы их не отфлитруете... как то
да и приведеный выше код должен лишь решать одну задачу... если просматривающий ноду не является ее авторам не показывать ноду... как бы все...
Однако, автор пишет:
А я о том и толкую, что код НЕ решает задачу доступа, он лишь фильтрует отображение при определенных условиях. А это две большие разницы.
Да и модуль для этого делать не нужно. Через вьювс должно решаться, dusov приводил ссылку.
Автору, однако, спасибо. Теперь я умею делать модули, правда, без админки.
фильтровать вьюсом можно это понятно.
Т.е. чел написал код чтобы тизеры не видеть??? если он не является автором ноды?
Кто подскажет как скрыть определенные ноды во view для неавторизированного пользователя?
Я сделал в ноде поле "скрывать для неавторизированных".
Но, тут загвоздка:
- если во view выставить фильтр по этому полю, то ноды скроются во view для всех пользователей(для авторизированных тоже). А авторизированные должны видить все ноды.
Возможные решения:
Делать две view в блоке на странице (1 - для неавторизированных со скрытыми нодами, 2 - для авторизированных со всеми нодами). Выставить разрешение на просмотр view по ролям.
Может есть другие варианты?
видимо в фильтарх исключить каждую. или метку делать длятаких нод в через скк и фильтровать по этому полю... ну и свое страницу для гостей делать во вьюхе
+
а в фильтрах третей вьюхе нельзя сделат ьелси роль = такой и если роль равна такойто + фильтр по ссккполю
У меня Drupal7.
Да, в фильтрах можно указывать логическое условие И, ИЛИ.
Но в фильтрах нет фильтра по роли(хотел добавить relationship, но там нет связи с юзерами).
Во вьюхах есть только настройки доступа(Access), где указываются роли
жаль. нужно чтобы кто то придумал что бы по 10 вьюх не делать...
Да, описал задачу подробнее тут http://www.drupal.ru/node/77355
Если кто может, помогите
Решил!
Мне помог модуль http://drupal.org/project/views_php .
С его помощью можно вставлять php в фильтры!
Если фильтр возвращает true, то нода в виде не выводится.
Подробности тут