В настоящее время доступ к нашим ресурсам осуществляется на основе c персон. Admin может обращаться к объектам кластера (группы JPA). Сотрудник может получить доступ к другому кластеру сущностей JPA. Список JPA сущностей для сопоставления персонажа доступен в нашем приложении. Во время событий JPA @PrePersist, @PreUpdate, @PreRemove и @PostLoad мы проверяем, имеет ли вошедший в систему пользователь роль, необходимую для выполнения этого действия.
Теперь нам нужен контроль доступа на основе атрибутов. Это означает, что пользователи с ролью Admin1 могут получить доступ только к сотрудникам в США, а пользователи с ролью Admin2 могут получить доступ к сведениям о сотрудниках как в США, так и в ЕС.
Чего я хотел бы добиться, так это переопределить запрос
Select * from MyTable
, который должен быть расширен на Select * from MyTable where (in clause)
Чтобы внести такие изменения в наше приложение, будет огромная активность. Однако, возможно ли будет внести такие изменения в запрос JPA, сгенерированный с подробностями безопасности?
Наше приложение с загрузочной пружиной, использующее Olin go OData 2 для всего взаимодействия с пользователем а не пружинные упоры контроллеров. Для запросов OData мы также используем прослушиватель запросов, который дает нам запрос JPA, который можно улучшить с помощью ODataJPAQueryExtensionEntityListener . Однако запросы, генерируемые во время асинхронных заданий, и любые другие запросы не в контексте OData. Мы хотим единообразного подхода для улучшения запросов из центрального места.