powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Иерархия групп пользователей - зацикливание
9 сообщений из 9, страница 1 из 1
Иерархия групп пользователей - зацикливание
    #37041646
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем приветы!
Делаю социальную сеть, в которой есть сущность "группа субъектов" (аналог группы пользователей, но в нее могут входить как пользователи, так и группы пользователей).
Эта сущность будет использоваться для разных задач, и она должна уметь реализовывать сетевую иерархию, которая нужна для случаев, когда, например, один участник состоит в нескольких группах:

Группа "Танцоры" = {Вася Пупкин}
Группа "Космонавты" = {Вася Пупкин, Юрий Гагарин, группа "Летчики-испытатели Казахстана"}
.

В частности, эта сущность будет использоваться и для реализации "френдования"* других юзеров и групп:

Группа Вася.Френды = {Петя, Коля, Маша}
Группа Аня.Френды = {Ксюша, Лина, Катя}


Проблема наступает, когда упомянутые юзеры добавляют к себе во френды группы френдов друг друга:

Группа Вася.Френды = {Группа Аня.Френды}
Группа Аня.Френды = {Группа Вася.Френды}


С точки зрения житейской логики все нормально: Анины друзья - и мои друзья, и наоборот. Но если понадобится раскручивать иерархию отношений, получится бесконечный цикл. А раскручивать иногда надо - например, при определении прав доступа определенного юзера к чтению блога Васи (если этот блог ведется в режиме доступа "только для друзей"). При этом, я не могу запретить ни Васе, ни Ане зафрендить группу друзей друг друга - зачем? То есть, в соответстии с требованиями задачи, я должен позволять юзерам создавать зацикленную иерархию.

Структура данных - условно такая:
User (UserID, Name)
Group(GroupID, Name)
Membrship(MembershipID, MemberID, GroupID)
- здесь в кач-ве MemberID может быть и UserID и GroupID

Как сказал выше, в некоторых случаях мне придется раскручивать иерархию, чтобы получать инфу о членстве субъектов в группах, их правах и т.п., и мне надо что-то придумать с проблемой цикличности. Я планирую контролировать цикличность и прерывать те ветви алгоритма, которые встретили сущность, уже выбранную ранее этим же алгоритмом.
Будет ли это выходом и не помешает ли решить задачи, описанные выше? Упускаю ли что-то важное? Есть опыт?

Спасибо!

*френдование - добавление пользователя в группу друзей
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37044428
непонял ничего
Единственно что запрещает тебе выбирать всех друзей Васи??
и где вообще в этом случаи будут циклы??
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37044431
raidan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov,

1) Зачем вы делаете социальную сеть?
2) Вы делаете её неправильно.
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37047882
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raidan2Dmitry Gurianov,

1) Зачем вы делаете социальную сеть?
2) Вы делаете её неправильно.

Ваши выводы поспешны по обоим пунктам.
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37047885
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филимонов Сергейнепонял ничего
Единственно что запрещает тебе выбирать всех друзей Васи??
и где вообще в этом случаи будут циклы??

В моих френдах есть группа "Вася.Друзья", в которую входит группа "Я.Друзья", в которую входит "Вася.Друзья"...
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37048930
Mainframe_старый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вы смешали субъекта и роли
2. у вас нет наследования ролей.
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37049258
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mainframe_старый1. Вы смешали субъекта и роли
2. у вас нет наследования ролей.

У меня вообще нет ролей в этом смысле, ибо модель - не RBAC, а доработанный ACL. Модель прав: Субъект-Разрешение-Объект, где разрешение - не обязательно явно заданное разрешение, но также динамически вычисляемое значение. К чему тут прикручивать роли - непонятно, так как разрешения часто всего зависят не только от переменных Субъект и Объект, но еще от других факторов. Или вы о чем?
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37049371
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov Я планирую контролировать цикличность и прерывать те ветви алгоритма, которые встретили сущность, уже выбранную ранее этим же алгоритмом.
Будет ли это выходом и не помешает ли решить задачи, описанные выше?
"Проблема" в данном случае заключается в том, что конкретная "дружеская" связь между двумя пользователями НЕ ЯВЛЯЕТСЯ ДВУХСТОРОННЕЙ. То есть, если я правильно понял, когда пользователь 1 объявляет другом пользователя 2, это не значит, что пользователь 2 так же считает своим другом пользователя 1.
Ваша схема (для простоты игнорируем функцию объявления друзьями всех друзей друга:)):

Пользователь--Имеет/Относится к-->Членство в группе
Членство в группе<--Относится к/Используется для--Группа
Пользователь--Объявил другом/Объявлен другом-->Пользователь

Например:
Пользователь 1-Объявил другом-Пользователя 2
Если бы смысл обратной связи был бы тоже "объявил другом", то зацикливание можно было бы контролировать при создании связей (как, например, в сборочных спецификациях). Но мы должны допустить:
Пользователь 2-Объявил другом-Пользователь1.

Ответы на Ваши вопросы:
1) Будет.
2) Не помешает.
...
Рейтинг: 0 / 0
Иерархия групп пользователей - зацикливание
    #37054298
Uridian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Gurianovпрерывать те ветви алгоритма, которые встретили сущность, уже выбранную ранее этим же алгоритмом

- это одно из двух условий выхода из рекурсии.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Иерархия групп пользователей - зацикливание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]