Всем привет.
Такая проблема. На сайте есть роль "глобальный модератор". У него есть право отредактировать/удалить любую ноду определенного типа (в том числе - group node). При этом у него нет права видеть приватные группы organic groups. Однако из-за права на удаление чего угодно, модератор может редактировать/удалять ноды в закрытых группах (и сами группы) по прямым ссылкам. А хотелось бы, чтобы модератор мог удалять и редактировать только те ноды, к которым у него есть доступ на просмотр, а из закрытых групп - нет. В идеале хотелось бы вообще запретить видеть закрытые группы всем, вплоть до user 1.
Кто как решал такую задачу?
Мне пока в голову пришло только радикальное лобовое решение: в hook_init() проверять групповой контекст, и если юзер в контексте закрытой группы и не является ее членом - drupal_access_denied(). Но ведь должно же быть что-то лучше, блин.
Комментарии
Не смотрел OG Roles, OG Access Admins, OG Access Roles?
OG User Roles стоит, с ним такое не получается. Затык в том, что помимо групповых нод есть еще и не-групповые, общественные. И чтобы их редактировать, получается надо разрешать edit all, а edit all к сожалению распространяется и на приватные.
Последние два посмотрел, не увидел, как ими можно добиться результата.
1. отказаться от user/1
ему можно всею более того я в своих модулях иногда это даже предусматриваю.
2. написать доп. модуль который будет перехват той возможности редактирования делать
Ну user/1-то да, не критично.
2. Уже сделал, да, пока что тупо через проверку в hook_init() на node_access('view', $node) - если нету, то и редактировать нельзя.
по значениям arg() ?
ай молодца
1. По валидированным значениям arg()
2. node_load() все равно кэшируется статически.
3. Я ж говорю - "пока", потом переделаю как надо.
В принципе, я нашел еще OG Access Boost, он немного другое делает, но - почти как надо.