【发布时间】:2019-11-20 23:05:36
【问题描述】:
我有SpringBoot 2.1.3 应用程序。我使用的是Spring Security,而不是我有两个实体User 和Roles,类似于以下内容:
@Entity
@Data
@Table(name = "USER")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private boolean enabled;
@ManyToMany(mappedBy = "users")
private List<Roles> role;
}
@Entity
@Data
@Table(name = "ROLES")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private Role ruolo;
@ManyToMany
private List<User> users;
}
角色是一个简单的enum,如下:
public enum Role {
ROLE_ADMIN,
ROLE_USER;
}
现在让SpringBoot 创建空的database 并假设添加一些默认记录:
现在考虑Roles 表将最多包含 2 个角色:ROLE_ADMIN 和 ROLE_USER。我设法用Roles 添加新的User,我设法用各自的Role 删除User(检索User -> 从User 获取Roles -> 迭代Roles 并为每个一删除User -> 删除User:
User user = userService.getByPk(Id);
List<Roles> roles = user.getRoles(); // this list size should be always 1
for (Rolesr : roles) {
r.getUsers().remove(user);
}
utenteService.deleteByPk(opeId);
将同时删除 User 记录和各自的 Roles_User 记录。
我不能做的是CHANGE用户角色。正如我们在图片中看到的那样,我有一个User 和ROLE_ADMIN Roles.
我想将 Roles,对于这个 User,从 ROLE_ADMIN 更改为 ROLE_USER!该函数应修改Roles_User如下:
roles_id user_id
2 1
我已经尝试了所有方法,但没有按预期工作。获得的最佳结果是在User 中添加两个Roles(ROLE_ADMIN 和ROLE_USER):
roles_id user_id
2 1
1 1
在该应用程序中,ROLES 是分层的,User 最多可以有一个Role。我使用了ManyToMany 关系,因为是默认的SpringSecurity DB 实现(我不知道我是否可以使用OneToMany 关系)。
我要疯了!你能帮帮我吗?
谢谢
【问题讨论】:
-
你试过什么?发布您的代码。您必须从 ADMIN 角色的用户中删除该用户,并将其添加到 USER 角色的用户中。
标签: hibernate spring-boot jpa