我使用带有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 的值?
答案 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;
}