Защита данных на уровне строк в архитектуре API - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующие таблицы:

  • Пользователь
  • Команда (много команд для многих пользователей)
  • Компания (одна компания для многих команд)

Я создал веб-приложение, которое становится все более сложным с объектами, принадлежащими пользователям, командам или компаниям, и которым можно «обмениваться» индивидуально с любым из перечисленных выше.

Например, у вас есть объект Document.Пользователь может создать объект документа, которым он владеет лично, член группы может создать документ на уровне группы для совместного использования всей командой, а администратор компании может создать документ, который будет использоваться всей компанией.Любой из них также может быть предоставлен конкретному пользователю, команде или компании.

Таблицы:

  • Документ (идентификатор, имя и т. Д.)
  • DocumentRelationships (documentId, userId, teamId, companyId, createDatetime, deleteDatetime)

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

ясно, что я не ищу RBAC - модель ролей и разрешений отлично работает для действий, меня больше интересует архитектура базы данных и структуры SQL для эффективного получения данных после их сохранения в структуре данных «сложного совместного использования».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...