Spring 数据 REST - 阻止 属性 基于角色的编辑

Spring Data REST - prevent property edit based on role

我使用 Spring Boot with Spring Data REST 进行数据访问,Spring Security 进行访问限制。

假设我有简单的实体:

@Entity
public class Person {

    @Id @GeneratedValue
    private Long id;
    private String firstName;
    private Boolean isAuthorizedForClasifiedData;
}

我在应用程序中有两个角色:USER 和 ADMIN。

有什么简单的方法可以防止用户更改 isAuthorizedForClasifiedData 的值,同时允许管理员更新它?

我想到的唯一解决方案是编写您自己的 setter 方法。

public void setIsAuthorizedForClasifiedData(Boolean isAuthorizedForClasifiedData) {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    Optional<? extends GrantedAuthority> role_admin = authentication.getAuthorities().stream().filter(role -> role.getAuthority().equals("ROLE_ADMIN")).findAny();
    role_admin.orElseThrow(() -> new YourOwnForbiddenException());
    this.test = test;
}