Каков наилучший архитектурный подход для приведенного ниже примера использования:
- Модель домена содержит компанию, отдел и должность.
- Компания может иметь несколько отделов. Отдел может иметь несколько позиций.
- Любой пользователь может иметь три уровня разрешений для каждого объекта - «Администратор», «Запись» или «Чтение».
- Если у пользователя есть «Администратор» доступ к Компании - тогда он имеет административный доступ к любому дочернему объекту. Если пользователь имеет доступ «Запись» к Департаменту, то любая должность в департаменте наследует это право доступа.
- Объекты должны храниться в постоянном хранилище, например, в реляционном или документном БД.
Насколько я понимаю, области OAuth не применимы для описанных выше случаев использования.
Один из способов - сохранить все данные (включая разрешения) в реляционной базе данных и каждый раз запрашивать их, используя объединения.
Другой способ - создать внешнюю систему, такую как LDAP, которая будет хранить отношения между сущностями и управлять их разрешениями. Сами сущности все еще хранятся в некоторой базе данных.
Оба приведенных выше варианта выглядят не слишком привлекательно по понятным причинам. В первом случае у вас слишком много объединений. Во втором случае вам может быть трудно управлять целостностью данных в двух системах. Кроме того, это нарушает принцип единого источника истины.
Вариант использования должен быть типичным для разработки программного обеспечения, но я не нашел ни одного совета «передового опыта» для этого варианта использования.
Буду признателен за любые предложения или ссылки на внешние ресурсы.