2019独角兽企业重金招聘Python工程师标准>>>
一般情况下使用三张表,用户表user、角色表role、权限表permission
表结构及关系如下图
Hibernate对应的pojo如下
user
package com.shiro.pojo;import java.util.HashSet;
import java.util.List;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Transient;@Entity
@Table(name="t_user")
public class User {private Integer id;private String username;private String password;private List<Role> roleList;//一个用户具有多个角色@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@ManyToMany@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},inverseJoinColumns={@JoinColumn(name="role_id")})public List<Role> getRoleList() {return roleList;}public void setRoleList(List<Role> roleList) {this.roleList = roleList;}@Transientpublic Set<String> getRolesName(){List<Role> roles=getRoleList();Set<String> set=new HashSet<String>();for (Role role : roles) {set.add(role.getRolename());}return set;}}
role
package com.shiro.pojo;
import java.util.ArrayList;
import java.util.List;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;@Entity
@Table(name="t_role")
public class Role {private Integer id;private String rolename;private List<Permission> permissionList;//一个角色对应多个权限private List<User> userList;//一个角色对应多个用户@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getRolename() {return rolename;}public void setRolename(String rolename) {this.rolename = rolename;}@OneToMany(mappedBy="role")public List<Permission> getPermissionList() {return permissionList;}public void setPermissionList(List<Permission> permissionList) {this.permissionList = permissionList;}@ManyToMany@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")})public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}@Transientpublic List<String> getPermissionsName(){List<String> list=new ArrayList<String>();List<Permission> perlist=getPermissionList();for (Permission per : perlist) {list.add(per.getPermissionname());}return list;}
}
permission
package com.shiro.pojo;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;@Entity
@Table(name="t_permission")
public class Permission {private Integer id;private String permissionname;private Role role;//一个权限对应一个角色@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getPermissionname() {return permissionname;}public void setPermissionname(String permissionname) {this.permissionname = permissionname;}@ManyToOne@JoinColumn(name="role_id")public Role getRole() {return role;}public void setRole(Role role) {this.role = role;}}
user与role是多对多关系 产生t_user_role为中间表