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





Комментарии