Дано приложение, которое показывает объекты (например, фильмы) в соответствии с определенными разрешениями пользователя.
общее разрешение на показ или создание объектов реализовано как RBAC с ролями и разрешениями.
конкретное разрешение на доступ к объекту с определенными атрибутами (например, к фильму с атрибутом «драма») должно быть реализовано с членством. Это означает, что у объекта нет свойства «драма», он входит в группу «драма». Если пользователь и объект являются членами одной и той же группы, пользователь имеет специальное разрешение на доступ к этому объекту. Могут быть разные группы для показа, создания или удаления объекта, например, простая группа просмотра или какая-то группа редактирования. Кроме того, имеется таблица, в которой указано, какие типы групп релевантны для определенных действий с определенными объектами. Например, релевантными группами для действия «шоу» на объектном фильме могут быть «жанр» и «возраст» (пригодность фильма для определенной аудитории).
Причина реализации описанным способом заключается в том, чтобы иметь большую гибкость, не касаясь кода. Изменения в группах могут быть обработаны в базе данных.
Общий дизайн базы данных:
Пример: фильм «Выживший» входит в группу «Жанр: драма» и возраст: 18 лет. Пользователь может получить к нему доступ, если он тоже состоит в этих группах.
Это звучит как хороший подход? Существуют ли какие-либо существующие решения, аналогичные этому подходу? Есть ли у него серьезные недостатки (например, слишком много запросов к базе данных — каждый день может быть несколько сотен пользователей)?
Пожалуйста, поделитесь со мной своими мыслями по этому поводу - выбор драмы в качестве категории для примера не случаен ;) Я просто не знаю, это тупик или я иду в правильном направлении. Я застрял на этом этапе довольно долго.