RBAC(Role-Based Access Control )基于角色的访问控制
-
整体架构图
-
实体类和数据表设计
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 权限点表
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class SysAcl {
private Integer id;
private String code;//权限码
private String name;//权限名称
private Integer aclModuleId;//权限所在的权限模块id
private String url;//请求的url, 可以填正则表达式
private Integer type;//类型,1:菜单,2:按钮,3:其他
private Integer status;//状态,1:正常,0:冻结
private Integer seq;//权限在当前模块下的顺序,由小到大
private String remark;//备注
private String operator;//操作者
private Date operateTime;//最后一次更新时间
private String operateIp;//最后一个更新者的ip地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code == null ? null : code.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAclModuleId() {
return aclModuleId;
}
public void setAclModuleId(Integer aclModuleId) {
this.aclModuleId = aclModuleId;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url == null ? null : url.trim();
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getSeq() {
return seq;
}
public void setSeq(Integer seq) {
this.seq = seq;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 权限模块
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysAclModule {
private Integer id;
private String name;//权限模块名称
private Integer parentId;//上级权限模块id
private String level;//权限模块层级
private Integer seq;//权限模块在当前层级下的顺序,由小到大
private Integer status;//状态,1:正常,0:冻结
private String remark;//备注
private String operator;//操作者
private Date operateTime;//最后一次操作时间
private String operateIp;//最后一次更新操作者的ip地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level == null ? null : level.trim();
}
public Integer getSeq() {
return seq;
}
public void setSeq(Integer seq) {
this.seq = seq;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;
/**
* 部门表
*/
@Builder
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
@ToString
public class SysDept {
private Integer id;//部门id
private String name;//部门名称
private Integer parentId;//上级部门id
private String level;//部门层级
private Integer seq;//部门在当前层级下的顺序,由小到大
private String remark;//备注
private String operator;//操作者
private Date operateTime;//最后一次操作时间
private String operateIp;//最后一次更新操作者的ip地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level == null ? null : level.trim();
}
public Integer getSeq() {
return seq;
}
public void setSeq(Integer seq) {
this.seq = seq;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 操作记录表
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysLog {
private Integer id;
private Integer type;//权限更新的类型,1:部门,2:用户,3:权限模块,4:权限,5:角色,6:角色用户关系,7:角色权限关系
private Integer targetId;//基于type后指定的对象id,比如用户、权限、角色等表的主键
private String operator;//操作者
private Date operateTime;//最后一次更新的时间
private String operateIp;//最后一次更新者的ip地址
private Integer status;//当前是否复原过,0:没有,1:复原过
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getTargetId() {
return targetId;
}
public void setTargetId(Integer targetId) {
this.targetId = targetId;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
package com.mmall.model;
/**
* 权限记录model扩展,加入修改前和修改后
* @author Administrator
*
*/
public class SysLogWithBLOBs extends SysLog {
private String oldValue;
private String newValue;
public String getOldValue() {
return oldValue;
}
public void setOldValue(String oldValue) {
this.oldValue = oldValue == null ? null : oldValue.trim();
}
public String getNewValue() {
return newValue;
}
public void setNewValue(String newValue) {
this.newValue = newValue == null ? null : newValue.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 角***uilder
@NoArgsConstructor
@AllArgsConstructor
public class SysRole {
private Integer id;
private String name;//角色名称
private Integer type;//角色的类型,1:管理员角色,2:其他
private Integer status;//状态,1:可用,0:冻结
private String remark;//备注
private String operator;//操作者
private Date operateTime;//最后一次更新的时间
private String operateIp;//最后一次更新者的ip地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 角色和权限关系表
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysRoleAcl {
private Integer id;
private Integer roleId;//角色id
private Integer aclId;//权限id
private String operator;//操作者
private Date operateTime;//最后一次更新的时间
private String operateIp;//最后一次更新者的ip
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Integer getAclId() {
return aclId;
}
public void setAclId(Integer aclId) {
this.aclId = aclId;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 角色和用户关系表
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysRoleUser {
private Integer id;
private Integer roleId;//角色id
private Integer userId;//用户id
private String operator;//操作者
private Date operateTime;//最后一次更新的时间
private String operateIp;//最后一次更新者的ip地址
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
package com.mmall.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;
/**
* 用户表
*/
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class SysUser {
private Integer id;
private String username;//用户名称
private String telephone;//手机号
private String mail;//邮箱
private String password;//加密后的密码
private Integer deptId;//用户所在部门的id
private Integer status;//状态,1:正常,0:冻结状态,2:删除
private String remark;//备注
private String operator;//操作者
private Date operateTime;//最后一次更新时间
private String operateIp;//最后一次更新者的ip地址
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 == null ? null : username.trim();
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone == null ? null : telephone.trim();
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail == null ? null : mail.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator == null ? null : operator.trim();
}
public Date getOperateTime() {
return operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public String getOperateIp() {
return operateIp;
}
public void setOperateIp(String operateIp) {
this.operateIp = operateIp == null ? null : operateIp.trim();
}
}
-
效果截图