在基于 JHipster 的项目中,我们需要根据登录的角色/用户选择性地过滤掉某些列。所有用户都可以查看/修改大部分列,但只有一些特权用户可以查看/修改某些安全字段/列。
看起来完成这项工作的唯一选择是使用 EntityListeners。PostLoad
我可以在事件期间使用 EntityListener 并屏蔽某个列。例如,我my_secure_column
用 XXX 屏蔽列并显示给用户。
用户然后更改一些其他字段/列(他可以访问)并提交表单。我是否必须在PreUpdate
事件中再次捕获部分填充的实体,从数据库中获取原始值my_secure_column
并在持久化之前设置它?
这一切似乎都是低效的。搜索了几个小时,但找不到最适合这个用例的具体实现。
编辑1:这看起来像是以稍微更好的方式实现这一目标的第一步。在 Spring Data JPA 中使用更新查询更新实体
我可以使用特定的部分更新,例如 updateAsUserRole、updateAsManagerRole 等,而不是一直保留整个实体。
@Repository
public interface CompanyRepository extends JpaRepository<Company, Integer> {
@Modifying(clearAutomatically = true)
@Query("UPDATE Company c SET c.address = :address WHERE c.id = :companyId")
int updateAddress(@Param("companyId") int companyId, @Param("address") String address);
}