Присвоение ролей при регистрации и мультисайтинг

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

Аватар пользователя Alex_R Alex_R 21 февраля 2011 в 1:00

Мультисайтинг с общими пользователями. Нужно чтобы при регистрации нового пользователя на каждом сайте ему присваивался свой набор ролей - это возможно?
Проблема заключается в том, что "правила" отрабатывают событие регистрации только на том сайте где она происходит...

Комментарии

Аватар пользователя WiseMan WiseMan 21 февраля 2011 в 10:44

"Alex_R" wrote:
Проблема заключается в том, что "правила" отрабатывают событие регистрации только на том сайте где она происходит...

Ну, а как же иначе определять к какому сайту принадлежит пользователь. Тогда либо на выбор пользователя, либо какой-то другой способ нужен для "точки отсчета"

На выбор пользователя:
user_selectable_roles
apply_for_role - с модерацией
registration_role_with_approval - тоже с модерацией

В зависимости от пути:
autoassignrole

Еще через приглашения, можно сделать
invite

Либо пишите свой модуль.

Аватар пользователя Alex_R Alex_R 21 февраля 2011 в 12:17

Не совсем понял как реализовать необходимое с помощью данных модулей. Объясню задачу подробнее. При регистрации пользователь должен получить некий набор прав на всех сайтах (от сайта к сайту они могут отличаться в зависимости от присваиваемых ролей). В случае если пользователь провинился на каком либо из сайтов, то у него права отбираются на конкретном сайте и это никак не должно отразиться на него возможностях на других сайтах.
Поскольку в Друпале статус "пользователь заблокирован" жестко привязан к учетной записи, а она на всех сайтах общая, то использовать данную возможность в моем случае невозможно.
Пытался обойти ее не давая никаких дополнительных прав зарегистрированному пользователю и автоматическим навешиванием на него ролей при регистрации (которые потом при желании модераторов могут быть сняты) но столкнулся, что не могу навестить роли на других (отличных от сайта регистрации) сайтах.

"WiseMan" wrote:
Либо пишите свой модуль.

Честно говоря пока даже не вижу по какому алгоритму он должен работать.

Может у кого нибудь есть идеи как это можно реализовать наиболее грамотно?

Аватар пользователя WiseMan WiseMan 21 февраля 2011 в 21:12

"Alex_R" wrote:
В случае если пользователь провинился на каком либо из сайтов, то у него права отбираются на конкретном сайте и это никак не должно отразиться на него возможностях на других сайтах.

Варианты:
1. самое простое - отдельная роль для каждого сайта. Как присвоить все роли разом - смотрите модули перечисленные выше. Там либо идеи в коде либо уже есть такое в готовом виде.

2. чтобы не плодить роли, можно попробовать таблицу users_roles сделать у каждого сайта свою, если она сейчас общая. Но тогда надо писать модуль чтобы давать роли на всех сайтах - тут вам потребуется обращаться к разным базам - статья на эту тему на друпал.ру. Тогда, возможно, придется создать отдельный административный сайт, где в settings.php будут подключены все базы

3. по аналогии с модулем domain сделать опцию принадлежности пользователя к тому или иному сайту.
И от этого отталкиваться:
-либо при назначении ролей (по крону, вручную и т.д.),
-либо запрещая доступ, например, через menu_alter

В любом случае, прежде чем думать об этом:

"Alex_R" wrote:
пока даже не вижу по какому алгоритму он должен работать.

т.е. техническая часть.

Разберитесь сначала с тем что хотите - с алгоритмом возможных событий, действий и зависимостей. Другими словами четкий результат того что нужно. Пока описание слишком расплывчато.

Аватар пользователя Alex_R Alex_R 22 февраля 2011 в 0:14

"WiseMan" wrote:

1. самое простое - отдельная роль для каждого сайта.
2. чтобы не плодить роли, можно попробовать таблицу users_roles сделать у каждого сайта свою,

У меня на данный момент по таблицам:
User - общая. (пользователи общие на всех сайтах)
User_roles - для каждого своя ( для каждого пользователя на каждом сайте свой набор ролей.)
Role - общая - список ролей один для всех сайтов.
Permission - для каждого своя (права ролей на разных сайтах могут незначительно отличаться).

"WiseMan" wrote:
3. по аналогии с модулем domain сделать опцию принадлежности пользователя к тому или иному сайту.

Мне не требуется привязка пользователя к сайту, в данном проекте это бесполезная информация.

"WiseMan" wrote:
ут вам потребуется обращаться к разным базам - статья на эту тему на друпал.ру

За ссылку огромное спасибо! После прочтения понял как оно должно работать - надо сделать не административный сайт, а сайт регистрации пользователей, чтобы все пользователи проходили процесс регистрации только на этом сайте и этот сайт раздавал роли на всех сайтах. Заодно, как я понимаю, этот сайт можно использовать как основной сайт для общего логина.
Спасибо! Пошел разбираться...

Аватар пользователя Zonder Zonder 12 апреля 2011 в 3:56

"WiseMan" wrote:
В зависимости от пути:
autoassignrole

А можно поподробнее про фичу с назначением роли по пути?
Насколько я понял изучая страницу модуля, эта фишка еще в разработке. Нет?

Аватар пользователя WiseMan WiseMan 12 апреля 2011 в 11:36

"Zonder" wrote:
А можно поподробнее про фичу с назначением роли по пути?
Насколько я понял изучая страницу модуля, эта фишка еще в разработке. Нет?

С чего решили?

Пробуйте и поймете как работает!

Аватар пользователя Zonder Zonder 12 апреля 2011 в 12:48

"WiseMan" wrote:
Пробуйте и поймете как работает!

Так в том то и дело Smile
Установил. В настройках модуля есть только это: