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);
}