Подскажите, пожалуйста, путь реализации иерархии нодов совмещенной с иерархией администраторов.
Администратор 1 уровня создает администраторов 2 уровня, администратор 2 уровня создает администраторов 3 уровня и т.д.
Также каждый администратор имеет возможность создания своей группы (только одной), просмотра только своей ВЕТКИ нодов (до последнего уровня), редактирования нодов своей группы.
Комментарии
Можно попробовать поступить следующим образом.
Для сущности user добавить дополнительное поле, в котором будут храниться все пользователи, созданные данным пользователем. Тип - Entity Reference.
То есть, если пользователь создает другого пользователя, то ему в это поле добавляется ссылка на uid созданного им пользователя. Добавление значение в поле можно делать с помощью своего модуля.
Для просмотра нод только своей ветки нужно просто переопределить права на просмотр с помощью модуля - чтобы пользователь мог смотреть ноды, созданные либо им самим, либо его прямыми или более дальними потомками.
Спасибо большое за отклик! Иерархию пользователей я реализовал на модуле subuser. однако с переопределением прав проблема. Вы могли бы подробнее пояснить как организовать переопределение вплоть до последнего потомка?
Ну, допустим, некий пользователь хочет просмотреть некую ноду и нужно определить, имеет ли он на это право или нет.
Для этого существует hook_node_access()
Вот хорошая статейка по его использованию - http://xandeadx.ru/blog/drupal/562
Вы у себя в переопределении этого хука узнаете, является ли данный пользователь автором ноды, либо предком автора ноды. И в этом случае разрешаете ему смотреть содержимое.
Как определить, является ли пользователь user2 предком пользователя user1 - это зависит от того, каким образом вы задаете их иерархию. Если так, как я посоветовал, то идете циклом от потомка к предку, проверяя значение полей потомков. Как эти поля хранятся в базе - это вы можете посмотреть с помощью средств работы с MySQL.
Либо можно задать наоборот - не список ссылок на потомков у одного родителя, а ссылку на родителя для потомка. И далее по этой ссылке поднимаетесь вверх от потомка и выше, пока не дойдете до предка или до администратора с uid=1. Только нужно сделать, чтобы пользователь-потомок не мог эту ссылку редактировать.