Spring Data REST-防止基于角色的属性编辑

时间:2018-08-20 11:51:48

标签: spring spring-boot spring-security spring-data-jpa spring-data-rest

我使用带有Spring Data REST的Spring Boot进行数据访问,并使用Spring Security进行访问限制。

假设我有一个简单的实体:

@Entity
public class Person {

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

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

有什么简单的方法可以防止USER在允许ADMIN更新的同时更改 isAuthorizedForClasifiedData 的值?

1 个答案:

答案 0 :(得分:2)

我想到的唯一解决方案是编写自己的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;
}