У меня есть следующие таблицы:
- Пользователь
- Команда (много команд для многих пользователей)
- Компания (одна компания для многих команд)
Я создал веб-приложение, которое становится все более сложным с объектами, принадлежащими пользователям, командам или компаниям, и которым можно «обмениваться» индивидуально с любым из перечисленных выше.
Например, у вас есть объект Document.Пользователь может создать объект документа, которым он владеет лично, член группы может создать документ на уровне группы для совместного использования всей командой, а администратор компании может создать документ, который будет использоваться всей компанией.Любой из них также может быть предоставлен конкретному пользователю, команде или компании.
Таблицы:
- Документ (идентификатор, имя и т. Д.)
- DocumentRelationships (documentId, userId, teamId, companyId, createDatetime, deleteDatetime)
Все мои запросы к объектам должны проверять, является ли пользователь частью команды, которой принадлежит объект, или частьюкомпания, которая владеет объектом, или пользователь владеет объектом, или у пользователя есть объект, к которому им предоставлен доступ.Поскольку совместное использование становится более сложным, запросы не кажутся масштабируемыми, и я думаю, что проблема может быть со структурой базы данных, которая требует большого количества объединений, связанных с разрешениями, особенно для объектов, которые становятся все более сложными.
ясно, что я не ищу RBAC - модель ролей и разрешений отлично работает для действий, меня больше интересует архитектура базы данных и структуры SQL для эффективного получения данных после их сохранения в структуре данных «сложного совместного использования».