В проекте на основе JHipster нам нужно выборочно отфильтровать определенные столбцы на основе роли/пользователя, вошедшего в систему. Все пользователи смогут просматривать/изменять большинство столбцов, но только некоторые привилегированные пользователи смогут просматривать/изменять определенные безопасные поля/столбцы.
Похоже, единственный вариант сделать это — использовать EntityListeners. Я могу использовать EntityListener и замаскировать определенный столбец во время события PostLoad
. Скажем, например, я маскирую столбец 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);
}