|
|
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
Всем приветы! Делаю социальную сеть, в которой есть сущность "группа субъектов" (аналог группы пользователей, но в нее могут входить как пользователи, так и группы пользователей). Эта сущность будет использоваться для разных задач, и она должна уметь реализовывать сетевую иерархию, которая нужна для случаев, когда, например, один участник состоит в нескольких группах: Группа "Танцоры" = {Вася Пупкин} Группа "Космонавты" = {Вася Пупкин, Юрий Гагарин, группа "Летчики-испытатели Казахстана"} . В частности, эта сущность будет использоваться и для реализации "френдования"* других юзеров и групп: Группа Вася.Френды = {Петя, Коля, Маша} Группа Аня.Френды = {Ксюша, Лина, Катя} Проблема наступает, когда упомянутые юзеры добавляют к себе во френды группы френдов друг друга: Группа Вася.Френды = {Группа Аня.Френды} Группа Аня.Френды = {Группа Вася.Френды} С точки зрения житейской логики все нормально: Анины друзья - и мои друзья, и наоборот. Но если понадобится раскручивать иерархию отношений, получится бесконечный цикл. А раскручивать иногда надо - например, при определении прав доступа определенного юзера к чтению блога Васи (если этот блог ведется в режиме доступа "только для друзей"). При этом, я не могу запретить ни Васе, ни Ане зафрендить группу друзей друг друга - зачем? То есть, в соответстии с требованиями задачи, я должен позволять юзерам создавать зацикленную иерархию. Структура данных - условно такая: User (UserID, Name) Group(GroupID, Name) Membrship(MembershipID, MemberID, GroupID) - здесь в кач-ве MemberID может быть и UserID и GroupID Как сказал выше, в некоторых случаях мне придется раскручивать иерархию, чтобы получать инфу о членстве субъектов в группах, их правах и т.п., и мне надо что-то придумать с проблемой цикличности. Я планирую контролировать цикличность и прерывать те ветви алгоритма, которые встретили сущность, уже выбранную ранее этим же алгоритмом. Будет ли это выходом и не помешает ли решить задачи, описанные выше? Упускаю ли что-то важное? Есть опыт? Спасибо! *френдование - добавление пользователя в группу друзей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2010, 20:04 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
непонял ничего Единственно что запрещает тебе выбирать всех друзей Васи?? и где вообще в этом случаи будут циклы?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2011, 15:31 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
Dmitry Gurianov, 1) Зачем вы делаете социальную сеть? 2) Вы делаете её неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2011, 15:34 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
raidan2Dmitry Gurianov, 1) Зачем вы делаете социальную сеть? 2) Вы делаете её неправильно. Ваши выводы поспешны по обоим пунктам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2011, 20:15 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
Филимонов Сергейнепонял ничего Единственно что запрещает тебе выбирать всех друзей Васи?? и где вообще в этом случаи будут циклы?? В моих френдах есть группа "Вася.Друзья", в которую входит группа "Я.Друзья", в которую входит "Вася.Друзья"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2011, 20:17 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
1. Вы смешали субъекта и роли 2. у вас нет наследования ролей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2011, 03:24 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
Mainframe_старый1. Вы смешали субъекта и роли 2. у вас нет наследования ролей. У меня вообще нет ролей в этом смысле, ибо модель - не RBAC, а доработанный ACL. Модель прав: Субъект-Разрешение-Объект, где разрешение - не обязательно явно заданное разрешение, но также динамически вычисляемое значение. К чему тут прикручивать роли - непонятно, так как разрешения часто всего зависят не только от переменных Субъект и Объект, но еще от других факторов. Или вы о чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2011, 18:09 |
|
||
|
Иерархия групп пользователей - зацикливание
|
|||
|---|---|---|---|
|
#18+
Dmitry Gurianov Я планирую контролировать цикличность и прерывать те ветви алгоритма, которые встретили сущность, уже выбранную ранее этим же алгоритмом. Будет ли это выходом и не помешает ли решить задачи, описанные выше? "Проблема" в данном случае заключается в том, что конкретная "дружеская" связь между двумя пользователями НЕ ЯВЛЯЕТСЯ ДВУХСТОРОННЕЙ. То есть, если я правильно понял, когда пользователь 1 объявляет другом пользователя 2, это не значит, что пользователь 2 так же считает своим другом пользователя 1. Ваша схема (для простоты игнорируем функцию объявления друзьями всех друзей друга:)): Пользователь--Имеет/Относится к-->Членство в группе Членство в группе<--Относится к/Используется для--Группа Пользователь--Объявил другом/Объявлен другом-->Пользователь Например: Пользователь 1-Объявил другом-Пользователя 2 Если бы смысл обратной связи был бы тоже "объявил другом", то зацикливание можно было бы контролировать при создании связей (как, например, в сборочных спецификациях). Но мы должны допустить: Пользователь 2-Объявил другом-Пользователь1. Ответы на Ваши вопросы: 1) Будет. 2) Не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2011, 20:03 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1542362]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
257ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 546ms |

| 0 / 0 |
