Модели (таблицы):
- Товар (id, имя, category_id, status_id)
- Категория (идентификатор, имя)
- Статус(идентификатор, имя)
Мне нужно ограничить доступ к элементам по точной категории и точному статусу.
Ситуация 1.
Роль 1 должна иметь доступ к элементам категорий с идентификаторами 1 и 3, а роль 2 — к элементам категорий с идентификаторами 2 и 4.
Ситуация 2.
Роль должна иметь доступ к Предметам: с Категорией 1, но только со Статусом 5 или 6 с Категорией 2, но только со Статусом 7 или 8
Категории и статусы можно создавать и удалять.
Как реализовать такой контроль доступа в концепции RBAC?
Для ситуации 1 моя идея состояла в том, чтобы динамически создавать разрешения с такими именами, как «accessItemWithCategory_{$categoryId}», и назначать их соответствующей роли, а затем проверять пользователя, может ли он («accessItemWithCategory_{$categoryId}»). это работает, но просто не чувствует себя хорошо.
Для ситуации 2, если продолжить такой подход, я получаю разрешения типа «accessItemWithCategory_{$categoryId}_Status_{$statusId}», и это просто уродливо и крайне негибко.
Если не использовать идентификаторы в именах разрешений, то что? я могу использовать простое разрешение «accessItem» с правилом, которое проверяет дополнительную таблицу с параметрами роли и элемента, которые позволят роли получить доступ к элементу? Но это означает перенос контроля авторизации за пределы RBAC и ад с поддержкой иерархии ролей.