Get the App
SLTechnology News&Howtos  ›  Database  › 

Design of privilege Management of Spring + Struts2 + ExtJs (1) Design of Database

Shulou Source: shulou.com Published: 2022-06-01 08:24:07 10月03日 Update

1、本系统的后台使用mysql数据库,SSH 框架,前端使用ExtJs实现。因为系统需要用到权限管理,所以作此记录,权限管理精确到前端的每一个按钮,甚至每一个action请求。

废话不多说,直接进入主题

(一)、数据库的设计

权限管理部分总共包括4个数据表:

Power(记录权限)、 Role(记录角色)、 PowerRole(中间表)、 PowerUrl(记录每一个action请求或者前端按钮)

(Role表)

package com.txb.model;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.Table;

@Entity

@Table(name="TB_ROLE")

public class Role {

private int roleId;

private String roleName;

private Set rolePowers;

private Set adminRoles;

@Id

@Column(name = "ROLE_ID", insertable = false, updatable = false, nullable = false, unique = true)

@GeneratedValue(strategy=GenerationType.AUTO)

public int getroleId() {

return roleId;

}

public void setroleId(int roleId) {

this.roleId = roleId;

}

@Column(name = "role_NAME", nullable = false, length = 50)

public String getroleName() {

return roleName;

}

public void setroleName(String roleName) {

this.roleName = roleName;

}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "role")

public Set getrolePowers() {

return rolePowers;

}

public void setrolePowers(Set rolePowers) {

this.rolePowers = rolePowers;

}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "role")

public Set getAdminroles() {

return adminRoles;

}

public void setAdminroles(Set adminRoles) {

this.adminRoles = adminRoles;

}

}

(Power表)

package com.txb.model;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.Table;

@Entity

@Table(name="TB_POWER")

public class Power {

private int powerId;

private String powerName;

private String powerType;

private String menu; //菜单

private Set rolePowers;

private Set actionUrls; //用户角色

@Id

@Column(name = "POWER_ID", insertable = false, updatable = false, nullable = false, unique = true)

@GeneratedValue(strategy=GenerationType.AUTO)

public int getPowerId() {

return powerId;

}

public void setPowerId(int powerId) {

this.powerId = powerId;

}

@Column(name="POWER_NAME", nullable = false, length = 50)

public String getPowerName() {

return powerName;

}

public void setPowerName(String powerName) {

this.powerName = powerName;

}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "power")

public Set getRolePowers() {

return rolePowers;

}

public void setRolePowers(Set rolePowers) {

this.rolePowers = rolePowers;

}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "power")

public Set getActionUrls() {

return actionUrls;

}

public void setActionUrls(Set actionUrls) {

this.actionUrls = actionUrls;

}

@Column(name="POWER_TYPE", nullable = false, length = 10)

public String getPowerType() {

return powerType;

}

public void setPowerType(String powerType) {

this.powerType = powerType;

}

@Column(name="POWER_MENU", nullable = true, length = 10)

public String getMenu() {

return menu;

}

public void setMenu(String menu) {

this.menu = menu;

}

}

(Role - Power 中间表,因为他们是多对多的关系)

package com.txb.model;

import java.io.Serializable;

import javax.persistence.*;

/**

* The persistent class for the rose_power database table.

*

*/

@Entity

@Table(name="TB_ROLE_POWER")

public class RolePower implements Serializable {

private int rpid;

private Power power;

private Role role;

public RolePower() {

}

@Id

@Column(name = "RP_ID", insertable = false, updatable = false, nullable = false, unique = true)

@GeneratedValue(strategy=GenerationType.AUTO)

public int getRpid() {

return this.rpid;

}

public void setRpid(int rpid) {

this.rpid = rpid;

}

@ManyToOne

@JoinColumn(name="POWER_ID")

public Power getPower() {

return this.power;

}

public void setPower(Power power) {

this.power = power;

}

@ManyToOne

@JoinColumn(name="ROLE_ID")

public Role getRole() {

return role;

}

public void setRole(Role role) {

this.role = role;

}

}

(PowerUrl 表,这个表是用来记录每一个action请求,判断该用户所拥有的权限是否能执行对应的action请求)

package com.txb.model;

import javax.persistence.Column;

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="TB_ACTION_URL")

public class ActionUrl {

private Power power;

private String url;

private String actionName;

private int aId;

@ManyToOne

@JoinColumn(name="POWER_ID")

public Power getPower() {

return power;

}

public void setPower(Power power) {

this.power = power;

}

@Column(name="URL", nullable = false, length = 50)

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

@Column(name="ACTION_NAME", nullable = false, length = 50)

public String getActionName() {

return actionName;

}

public void setActionName(String actionName) {

this.actionName = actionName;

}

@Id

@Column(name = "A_ID", insertable = false, updatable = false, nullable = false, unique = true)

@GeneratedValue(strategy=GenerationType.AUTO)

public int getaId() {

return aId;

}

public void setaId(int aId) {

this.aId = aId;

}

}

到此权限数据库就已经设计完毕,下一篇给大家介绍后台逻辑部分

Tags: Permissions data database management front end design background buttons users systems roles parts precision themes nonsense datasheets frames menus logic Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Shulou Tech Info Linux macOS MariaDB Redmi