首页 > 解决方案 > 扩展 EntityManager 方法

问题描述

目前,我们的资源是基于静态角色访问的。管理员可以访问集群(JPA 组)实体Employee可以访问其他 JPA 实体集群。JPA 实体到角色映射的列表在我们的应用程序中可用。在 JPA 事件 @PrePersist、@PreUpdate、@PreRemove 和 @PostLoad 期间,我们检查登录用户是否具有执行此活动所需的角色。

现在我们在这里需要基于属性的访问控制。这意味着具有Admin1角色的用户只能访问美国员工,而具有 Admin2 角色的用户可以访问美国和欧盟员工的详细信息。

我想要实现的是覆盖查询

Select * from MyTable增强 Select * from MyTable where (in clause)

在我们的应用程序中进行此类更改将是一项巨大的活动。但是,是否可以对使用安全详细信息生成的 JPA 查询进行此类更改?

我们的 Spring Boot 应用程序使用Olingo OData 2进行所有用户交互,而不是 spring rest 控制器。对于 OData 查询,我们还使用查询侦听器,它为我们提供了可以使用ODataJPAQueryExtensionEntityListener增强的 JPA 查询。但是,在异步作业期间生成的查询以及不在 OData 上下文中的任何其他查询。我们想要一种统一的方法来增强来自中心位置的查询。

标签: jpaeclipselinkentitymanager

解决方案


推荐阅读