Здравствуйте. Имеется следующая задача - необходимо сделать разграничение доступа к материалам сайта не совсем стандартным образом.
У организации имеются представительства в 64 регионах. Нужно сделать так, чтобы региональные представители имели доступ(на просмотр) только к материалам своего региона (редко еще нескольких). Может быть и ситуация когда одна нода доступна сразу для представителей нескольких регионов. Кроме этих материалов имеются и общедоступные. Для каждого региона нужно назначить регионального модератора, который будет добавлять, редактировать и удалять региональные материалы. Все это нужно сделать без привязки к типу материала.
Думал в следующем направлении: заводится словарь со списком регионов("Регионы"), к нодам добавляются термины из этого словаря(названия регионов). Потом с помощью модуля [module=profile_taxonomy] эти же термины приписываются к профилям пользователей. Указать что пользователь является региональным модератором можно и через роли.
Собственно проблема:
Как сделать так, чтобы ноды с терминами из словаря "Регионы" были доступны только пользователям, в профилях которых был указан соответствующий регион. Можно конечно в ядро залезть, но не хочется. Может кто-нибудь знает как для этого [ru-api=hook_nodeapi] приспособить?
Были и другие мысли, но:
Роли вроде не очень подходят - 128 ролей только для этого (простой юзер и модератор для каждого региона), так что [module=taxonomy_access] отпадает. [module=acl] и манипуляции с [ru-api=hook_node_grants] и [ru-api=hook_node_access_records] тоже не к месту - для каждой региональной ноды минимум по две записи в базе, да и реализация будет нехилая.
Может я не в том направлении копаю? Вобщем, буду рад вашей помощи.
Комментарии
вам шашечки иль ехать? вы уж определитесь с задачей
можно и на ролях определится и на таксо доступе можно cck поле приспособить. Вы я вижу на той стадии когда имено стоишь на развилке а пути все равно ведут на вокзал все.
Все описанные способы тоже верны. Все таки лучше мне кажется роли выбрать и где то есть модульки для более расширенной работы ролей- если память не изменяет то 128 ролей не нужны. за счет расширения роли количество их резко снижается. Роли бы я разделил не на офисы -регионы а на тип предоставляемой инфы. иль еще как. к роли привязал бы термины иль cck поле. а к юзеру термин и тд. ну как то так бы. может и ошибаюсь.
А вообще если есть время модулек нужен. кастом.
Вы двигаетесь в правильном направлении:
1) Заведите словарь "Регионы"
2) Всем нодам присваивайте темины из этого словаря
3) С помощью profile_taxonomy привязывайте термин к юзеру
4) ПИШЕТЕ МОДУЛЬ, который при загрузке ноды будет проверять, есть ли в терминах ноды термин юзера. Если нет, то 403. Перехват hook_load(), фактически, весь модуль — одна функция.
5) PROFIT!!!
http://drupal.org/project/term_permissions
гибче было бы роли как большие регионы - типа как росиию на 7 поделили. и термы с родительскими и дочерними элементами.
потом гляну но по названию уже интересен.
в общем человеку считай модулек и не нужен роли правда считай все равно использовать нужно но для всех считай однотипных.
итого ему два доп модуля.
профит
Раз уж смотрите в сторону таксономии, можете посмотреть на реализацию модуля Taxonomy Access Control Lite - лёгкий модулек который обеспечивает доступ через таксономию.
Может чем поможет.
посмотрите этот модуль http://www.drupal.ru/node/40829
собственно делался примерно под такую же задачу.
настройка в основном через закрытые группы, ваш региональный модератор
в каждой группе может не только добавлять материалы но и приватные ноды, допустим отчеты .
если нужно одновременно и консультирование - настраивается через ролевые группы.
то есть - все что вам нужно - есть .
а таксономию используйте по назначению.
ps
да, если нужно что-то дополнительно - обращайтесь ,
как раз сейчас сижу обдумываю что еще прикрутить
правда под образовательный проект
но можно и перенастроить
Спасибо всем отписавшимся.
Да ехать конечно, но хотелось бы ехать с шашечками а не как попало)
Я как раз склоняюсь в сторону кастом модуля, проблема заключается в том, что непонятно с какой стороны к нему подъехать. Если бы был хук типа nodeapi но не на пост- а на пре-процессинг было бы счастье) Чтобы работало как снипет отображения для блоков. Но это уже из категории «если бы у бабушки были определенные параметры, она была бы дедушкой»)). В общем, сейчас смотрю в сторону ролей и TACL. Где-то я встречал что-то вроде role trigger, и если удастся обойтись 68 ролями (то бишь рег.модер., рег.представитель, 64 роли под регионы и все это скомбинировать), на этом скорее всего и остановлюсь, хотя с ужасом представляю как будет выглядеть /admin/user/permissions. Может еще с CCK попробую.
Вы не совсем меня поняли, нужно сделать БЕЗ привязки к типу материала. Там обещается чертова уйма типов (документы, отчеты, статистика и еще штук 10) и количество будет увеличиваться, а hook_load как и hook_access это только для нода-модулей. Т.е сразу ограничение для добавления типа материала, а если горе-админы полезут в код, жди беды.
Сейчас посмотрю. Но я так понимаю это что-то вроде acl? Если так, тогда не подходит - у меня для каждого региона планируется не менее чем по 1000 нод, а при таком подходе это приличное количество записей в бд. Хоть и обещают дедик, не хочется лишний раз нагружать.
В общем, я еще подумаю, о результатах обязательно отпишусь, думаю тема актуальна.
Задачу решил. Решение описано [#42728]здесь[/#]
так как решили задачу?