【问题标题】:Spring Data REST - prevent property edit based on roleSpring Data REST - 防止基于角色的属性编辑
【发布时间】:2019-01-26 13:11:56
【问题描述】:
我使用 Spring Boot 和 Spring Data REST 进行数据访问,使用 Spring Security 进行访问限制。
假设我有一个简单的实体:
@Entity
public class Person {
@Id @GeneratedValue
private Long id;
private String firstName;
private Boolean isAuthorizedForClasifiedData;
}
我在应用程序中有两个角色:USER 和 ADMIN。
有什么简单的方法可以防止 USER 更改 isAuthorizedForClasifiedData 的值,同时允许 ADMIN 更新它?
【问题讨论】:
标签:
spring
spring-boot
spring-security
spring-data-jpa
spring-data-rest
【解决方案1】:
我想出的唯一解决方案是编写自己的 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;
}