Реализация иерархии материалов совмещенной с иерархией администраторов.

Главные вкладки

Аватар пользователя dionis20 dionis20 10 ноября 2014 в 18:04

Подскажите, пожалуйста, путь реализации иерархии нодов совмещенной с иерархией администраторов.
Администратор 1 уровня создает администраторов 2 уровня, администратор 2 уровня создает администраторов 3 уровня и т.д.
Также каждый администратор имеет возможность создания своей группы (только одной), просмотра только своей ВЕТКИ нодов (до последнего уровня), редактирования нодов своей группы.

Комментарии

Аватар пользователя roman-yrv roman-yrv 11 ноября 2014 в 10:37

Можно попробовать поступить следующим образом.

Для сущности user добавить дополнительное поле, в котором будут храниться все пользователи, созданные данным пользователем. Тип - Entity Reference.
То есть, если пользователь создает другого пользователя, то ему в это поле добавляется ссылка на uid созданного им пользователя. Добавление значение в поле можно делать с помощью своего модуля.

Для просмотра нод только своей ветки нужно просто переопределить права на просмотр с помощью модуля - чтобы пользователь мог смотреть ноды, созданные либо им самим, либо его прямыми или более дальними потомками.

Аватар пользователя dionis20 dionis20 11 ноября 2014 в 11:56

"roman-yrv" wrote:

Спасибо большое за отклик! Иерархию пользователей я реализовал на модуле subuser. однако с переопределением прав проблема. Вы могли бы подробнее пояснить как организовать переопределение вплоть до последнего потомка?

Аватар пользователя roman-yrv roman-yrv 11 ноября 2014 в 12:12

Ну, допустим, некий пользователь хочет просмотреть некую ноду и нужно определить, имеет ли он на это право или нет.

Для этого существует hook_node_access()

Вот хорошая статейка по его использованию - http://xandeadx.ru/blog/drupal/562

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

Как определить, является ли пользователь user2 предком пользователя user1 - это зависит от того, каким образом вы задаете их иерархию. Если так, как я посоветовал, то идете циклом от потомка к предку, проверяя значение полей потомков. Как эти поля хранятся в базе - это вы можете посмотреть с помощью средств работы с MySQL.

Либо можно задать наоборот - не список ссылок на потомков у одного родителя, а ссылку на родителя для потомка. И далее по этой ссылке поднимаетесь вверх от потомка и выше, пока не дойдете до предка или до администратора с uid=1. Только нужно сделать, чтобы пользователь-потомок не мог эту ссылку редактировать.