用户/角色系统,如何实现其他属性?

时间:2018-04-20 16:46:50

标签: hibernate jpa orm

我正在使用Spring Boot处理应用程序,因此我正在使用的UML类有3个实体:

  1. 管理员(ID,用户名,密码,电子邮件)
  2. 管理器(ID,用户名,密码,电子邮件,电话)
  3. 客户端(ID,用户名,密码,电子邮件,电话,住址)
  4. 管理员使用Manager可以映射一对多/多对一 与实体客户端一对多/多对一。

    经过一些研究后,我将其更改为用户/角色系统,因此实体用户 有这样的属性:

        public class AppUser implements Serializable {
    
        @Id @GeneratedValue
        private Long id;
        @Column(unique = true)
        private String username;
        private String password;
        @ManyToMany(fetch = FetchType.EAGER)
        private Collection<AppRole> roles = new ArrayList<>();
    }
    

    角色实体

     public class AppRole implements Serializable {
    
            @Id @GeneratedValue
            private Long id;
            private String roleName;
    
    }
    

    如何实施其他实体,Manager和Client,因为它们具有其他不同的属性?

    以及我现在应该如何实现映射,因为只有一个实体?

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您应该在AppUser类中添加这些字段,并在需要时插入数据。例如,在创建Manager时,您可以输入admin_id并将client_id留空。这就是一个admin在他下面也可能有多个managers的方式。

@Entity
@Table(name = "AppUser")
public class AppUser implements Serializable {

    @Id @GeneratedValue
    private Long id;
    @Column(unique = true)
    private String username;
    private String password;
    @Column(unique = true)
    private String email;
    @Column(unique = true)
    private String phone;
    private String address;
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Collection<AppRole> roles = new ArrayList<>();
    @ManyToOne
    @JoinColumn(name = "client_id")
    private AppUser client;
    @ManyToOne
    @JoinColumn(name = "manager_id")
    private AppUser manager;
    @ManyToOne
    @JoinColumn(name = "admin_id")
    private AppUser admin;
}

然后,您可以根据您的要求为每个roles分别提供appUser。 如果您尚未使用Spring Security,则应将其用于角色和权限。