Я использую модель ABAC для защиты доступа к некоторым объектам в проекте. Согласно https://dzone.com/articles/simple-attribute-based-access-control-with-spring я могу легко определить некоторые правила политики для обновления/удаления сущностей в проекте. После многих часов поиска я наткнулся на единственный нормально задокументированный способ фильтрации данных, доступных пользователю: использование Spring security @PostFilter
. Проблема заключается в производительности этого подхода. Какие есть доступные способы переложить ответственность за фильтрацию данных на базу данных, при этом не смешивая бизнес и логику ролевой модели?
Пока пробовал только кодить JPA Specification: модуль, отвечающий за ролевую модель, учитывает параметры пользователя (id, group_id/organization_id) для составления логических выражений, и добавляются все параметры, по которым нужно фильтровать бизнес чтобы состоять из таких выражений Спецификации. Но это решение вынуждает использовать только спецификацию для поиска данных. Более того, не очень понятно, как хранить эти выражения в хранилище политик.