Наш продукт является специфическим для домена. Вот некоторые из типичных случаев использования безопасности:
- Обычный пользователь может редактировать только данные своего профиля или данные кого-либо на основании разрешения
- Пользователь может видеть только данные, принадлежащие его отделу, в то время как другой пользователь может просматривать данные из всех отделов
Эти требования меняются от клиента к клиенту, поэтому мы не можем просто жестко кодировать логику фильтрации в нашем приложениикодировать или поддерживать несколько версий приложения.
Мы используем фильтрацию на основе критериев Hibernate и хотели бы добавить дополнительные ограничения на основе некоторых выражений, связанных с разрешением.Выражение для варианта использования 1, упомянутое выше, может выглядеть следующим образом: 'userId=user.userId'
, где «пользователь» является ключевым словом и представляет текущего аутентифицированного пользователя, а «ИД пользователя» является свойством объекта, для которого создаются критерии.
Мы хотим определить dsl, используя который мы можем вывести ограничение критериев, а также предложение where для sql.
Существуют ли какие-либо фреймворки, которые позволят нам сделать это, не переходя на dsl?Основываясь на вышеупомянутых случаях использования, думаете ли вы, что это может быть достигнуто другим способом?
Дополнительная информация: Мы определяем только доменные объекты с некоторой метаинформацией для создания пользовательского интерфейса.Стойкость, безопасность и т. Д. Обеспечиваются нашей основной структурой.