【发布时间】:2020-12-10 23:06:37
【问题描述】:
我有三个实体用户、机构和角色。 1)用户和机构之间的一对多 2)用户和角色之间的多对多
-------用户-------
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_Id")
private int userId;
@Column(name="name")
private String name;
@Column(name="lastname")
private String lastname;
@Column(name="email")
private String email;
@Column(name="password")
private String password;
@Column(name="isActive")
private boolean isActive;
@Column(name="lastActive")
private String lastActive;
@Column(name="createdDate")
private String createdDate;
@Column(name="isBlocked")
private boolean isBlocked;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "institution_id", nullable = false)
@JsonIgnoreProperties(value = {"user"})
private Institution institution;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_has_role",
joinColumns = {
@JoinColumn(name = "user_id", referencedColumnName = "user_id",
nullable = false, updatable = true)},
inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = "role_id",
nullable = false, updatable = true)})
@JsonIgnoreProperties(value = {"users"})
private Set<Role> roles = new HashSet<>();
}
-------机构-------
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "institution")
public class Institution {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="institution_Id")
private int institutionId;
@Column(name="name")
private String name;
@Column(name="type")
private String type;
@Column(name="location")
private String location;
@OneToMany(mappedBy = "institution", fetch = FetchType.LAZY)
@JsonIgnoreProperties(value = {"institution" , "user"})
private Set<User> user;
}
-------角色-------
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="role_Id")
private int roleId;
@Column(name="name")
private String name;
@Column(name="description")
private String description;
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
@JsonIgnoreProperties(value = {"roles"})
private Set<User> users = new HashSet<>();
}
这些是我在 MySql 中的 3 个实体和表 我有 7 个角色 • 超级用户 • 银行管理员 • 银行支持 • 银行服务 • 商户管理员 • 商家支持 • 商家服务
超级用户可以创建任意角色的用户
@PostMapping("/addUser")
public String addUser(@RequestBody User user) {
String rawpassword = user.getPassword();
String encodedpasswrod = passwordencoder.encode(rawpassword);
user.setPassword(encodedpasswrod);
userrepository.save(user);
return "user saved with name: " + user.getName();
}
此 api 有效,我可以将角色设置为我的 api json 正文中的任何内容
但希望如果用户是银行管理员,他只能创建银行支持和银行服务 我试图创建一个只能创建具有这两个特定角色的用户的新 API。 然后限制银行管理员访问可以创建任何类型用户的其他 API。
有没有其他方法可以做到这一点,如果没有,我该怎么做......
【问题讨论】:
标签: java mysql spring-boot api