[РЕШЕНО] Нестандартный доступ к нодам по таксономии

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

Аватар пользователя vermix1 vermix1 7 апреля 2010 в 3:20

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

У организации имеются представительства в 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] тоже не к месту - для каждой региональной ноды минимум по две записи в базе, да и реализация будет нехилая.

Может я не в том направлении копаю? Вобщем, буду рад вашей помощи.

Комментарии

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 7 апреля 2010 в 5:08

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

Все описанные способы тоже верны. Все таки лучше мне кажется роли выбрать и где то есть модульки для более расширенной работы ролей- если память не изменяет то 128 ролей не нужны. за счет расширения роли количество их резко снижается. Роли бы я разделил не на офисы -регионы а на тип предоставляемой инфы. иль еще как. к роли привязал бы термины иль cck поле. а к юзеру термин и тд. ну как то так бы. может и ошибаюсь.

А вообще если есть время модулек нужен. кастом.

Аватар пользователя kyky kyky 7 апреля 2010 в 5:46

Вы двигаетесь в правильном направлении:
1) Заведите словарь "Регионы"
2) Всем нодам присваивайте темины из этого словаря
3) С помощью profile_taxonomy привязывайте термин к юзеру
4) ПИШЕТЕ МОДУЛЬ, который при загрузке ноды будет проверять, есть ли в терминах ноды термин юзера. Если нет, то 403. Перехват hook_load(), фактически, весь модуль — одна функция.
5) PROFIT!!!

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 7 апреля 2010 в 8:28

http://drupal.org/project/term_permissions

гибче было бы роли как большие регионы - типа как росиию на 7 поделили. и термы с родительскими и дочерними элементами.

"kyky" wrote:
profile_taxonomy

потом гляну но по названию уже интересен.

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

итого ему два доп модуля.

профит

Аватар пользователя lugann lugann 7 апреля 2010 в 13:12

посмотрите этот модуль http://www.drupal.ru/node/40829
собственно делался примерно под такую же задачу.
настройка в основном через закрытые группы, ваш региональный модератор
в каждой группе может не только добавлять материалы но и приватные ноды, допустим отчеты .
если нужно одновременно и консультирование - настраивается через ролевые группы.

то есть - все что вам нужно - есть .

а таксономию используйте по назначению.

ps

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

Аватар пользователя vermix1 vermix1 7 апреля 2010 в 17:31

Спасибо всем отписавшимся.

"<a href="mailto:shamaner@drupal.org">shamaner@drupal.org</a>" wrote:
вам шашечки иль ехать? вы уж определитесь с задачей

Да ехать конечно, но хотелось бы ехать с шашечками а не как попало)
"<a href="mailto:shamaner@drupal.org">shamaner@drupal.org</a>" wrote:
можно и на ролях определится и на таксо доступе можно cck поле приспособить. Вы я вижу на той стадии когда имено стоишь на развилке а пути все равно ведут на вокзал все.

Все описанные способы тоже верны. Все таки лучше мне кажется роли выбрать и где то есть модульки для более расширенной работы ролей- если память не изменяет то 128 ролей не нужны. за счет расширения роли количество их резко снижается. Роли бы я разделил не на офисы -регионы а на тип предоставляемой инфы. иль еще как. к роли привязал бы термины иль cck поле. а к юзеру термин и тд. ну как то так бы. может и ошибаюсь.

А вообще если есть время модулек нужен. кастом.


Я как раз склоняюсь в сторону кастом модуля, проблема заключается в том, что непонятно с какой стороны к нему подъехать. Если бы был хук типа nodeapi но не на пост- а на пре-процессинг было бы счастье) Чтобы работало как снипет отображения для блоков. Но это уже из категории «если бы у бабушки были определенные параметры, она была бы дедушкой»)). В общем, сейчас смотрю в сторону ролей и TACL. Где-то я встречал что-то вроде role trigger, и если удастся обойтись 68 ролями (то бишь рег.модер., рег.представитель, 64 роли под регионы и все это скомбинировать), на этом скорее всего и остановлюсь, хотя с ужасом представляю как будет выглядеть /admin/user/permissions. Может еще с CCK попробую.
"kyky" wrote:
Вы двигаетесь в правильном направлении:
1) Заведите словарь "Регионы"
2) Всем нодам присваивайте темины из этого словаря
3) С помощью profile_taxonomy привязывайте термин к юзеру
4) ПИШЕТЕ МОДУЛЬ, который при загрузке ноды будет проверять, есть ли в терминах ноды термин юзера. Если нет, то 403. Перехват hook_load(), фактически, весь модуль — одна функция.
5) PROFIT!!!

Вы не совсем меня поняли, нужно сделать БЕЗ привязки к типу материала. Там обещается чертова уйма типов (документы, отчеты, статистика и еще штук 10) и количество будет увеличиваться, а hook_load как и hook_access это только для нода-модулей. Т.е сразу ограничение для добавления типа материала, а если горе-админы полезут в код, жди беды.
"lugann" wrote:
посмотрите этот модуль http://www.drupal.ru/node/40829
собственно делался примерно под такую же задачу.

Сейчас посмотрю. Но я так понимаю это что-то вроде acl? Если так, тогда не подходит - у меня для каждого региона планируется не менее чем по 1000 нод, а при таком подходе это приличное количество записей в бд. Хоть и обещают дедик, не хочется лишний раз нагружать.

В общем, я еще подумаю, о результатах обязательно отпишусь, думаю тема актуальна.