权限控制相关数据表分析和创建

权限控制相关数据表分析和创建

实体类分析:包含用户、角色、权限三大块

用户User,角色Role,权限Permission

为了方便进行动态的菜单管理,也就是不同权限用户进入到后台系统所看到的菜单是不同的。所以再新增一个菜单Menu实体。不同用户的系统菜单,可以根据用户角色进行管理,因而角色跟菜单形成了多对多的映射关系。

用户:就是系统的登录用户

权限:无论是粗粒度还是细粒度,都需要描述权限的相关信息,如果是粗粒度的权限控制,可能需要在权限表中描述访问起源的URL信息。

角色:就是为了方便对用户进行授权,可以理解为角色就是权限的集合。

用户–角色:多对多的关系。一个用户可以拥有多个角色,一个角色也可以同时被多个用户拥有。

角色–权限:也是多对多的关系。角色就是权限的集合嘛,不同角色也可以拥有相同的权限。

三个实体多对多的表关联,需要两张中间表,因此一共需要创建五张数据表。

再加上菜单的引入,一共需要创建七张表。

这四个实体类的代码如下:

User
/**
* @description:后台用户
*/
@Entity
@Table(name = “T_USER”)
public class User {
@Id
@GeneratedValue
@Column(name = “C_ID”)
private int id; // 主键
@Column(name = “C_BIRTHDAY”)
private Date birthday; // 生日
@Column(name = “C_GENDER”)
private String gender; // 性别
@Column(name = “C_PASSWORD”)
private String password; // 密码
@Column(name = “C_REMARK”)
private String remark; // 备注
@Column(name = “C_STATION”)
private String station; // 状态
@Column(name = “C_TELEPHONE”)
private String telephone; // 联系电话
@Column(name = “C_USERNAME”, unique = true)
private String username; // 登陆用户名
@Column(name = “C_NICKNAME”)
private String nickname; // 真实姓名
@ManyToMany
@JoinTable(name = “T_USER_ROLE”, joinColumns = {
@JoinColumn(name = “C_USER_ID”, referencedColumnName = “C_ID”) }, inverseJoinColumns = {
@JoinColumn(name = “C_ROLE_ID”, referencedColumnName = “C_ID”) })
private Set roles = new HashSet(0);
}

Role

/**
 * @description:角色
 */
@Entity
@Table(name = "T_ROLE")
public class Role {
@Id
@GeneratedValue
@Column(name = "C_ID")
private int id;
@Column(name = "C_NAME")
private String name; // 角色名称
@Column(name = "C_KEYWORD")
private String keyword; // 角色关键字,用于权限控制
@Column(name = "C_DESCRIPTION")
private String description; // 描述
@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<User>(0);
@ManyToMany
@JoinTable(name = "T_ROLE_PERMISSION", joinColumns = {
        @JoinColumn(name = "C_ROLE_ID", referencedColumnName = "C_ID") }, inverseJoinColumns = {
                @JoinColumn(name = "C_PERMISSION_ID", referencedColumnName = "C_ID") })
private Set<Permission> permissions = new HashSet<Permission>(0);

@ManyToMany
@JoinTable(name = "T_ROLE_MENU", joinColumns = {
        @JoinColumn(name = "C_ROLE_ID", referencedColumnName = "C_ID") }, inverseJoinColumns = {
                @JoinColumn(name = "C_MENU_ID", referencedColumnName = "C_ID") })
private Set<Menu> menus = new HashSet<Menu>(0);
}

Permission

/**
 * @description:权限名称
 */
@Entity
@Table(name = "T_PERMISSION")
public class Permission {
@Id
@GeneratedValue
@Column(name = "C_ID")
private int id;
@Column(name = "C_NAME")
private String name; // 权限名称
@Column(name = "C_KEYWORD")
private String keyword; // 权限关键字,用于权限控制
@Column(name = "C_DESCRIPTION")
private String description; // 描述
@ManyToMany(mappedBy = "permissions")
private Set<Role> roles = new HashSet<Role>(0);
}

Menu

/**
 * @description:菜单
 */
@Entity
@Table(name = "T_MENU")
public class Menu {
@Id
@GeneratedValue
@Column(name = "C_ID")
private int id;
@Column(name = "C_NAME")
private String name; // 菜单名称
@Column(name = "C_PAGE")
private String page; // 访问路径
@Column(name = "C_PRIORITY")
private Integer priority; // 优先级
@Column(name = "C_DESCRIPTION")
private String description; // 描述
@ManyToMany(mappedBy = "menus")
private Set<Role> roles = new HashSet<Role>(0);
@OneToMany(mappedBy = "parentMenu")
private Set<Menu> childrenMenus = new HashSet<Menu>();
@ManyToOne
@JoinColumn(name = "C_PID")
private Menu parentMenu;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值