jeecg权限设计的介绍

来源:互联网 发布:传奇盛世光翼升阶数据 编辑:程序博客网 时间:2024/05/14 18:13

1 、基本介绍

jeecg丰富的权限设计,能满足80%以上的权限需求,部门,用户,角色,菜单资源权限,操作资源(就是页面上的增删查改,甚至自定义操作 例如:导入excel、导出XML)之间的关系,从页面,ER图,代码,三个角度介绍。

2、权限实现

2.1 部门和用户

当我们登录jeecg的时候出现让我们选择部门的下拉框
部分选择
可以知道一个用户可以同时存在多个部门,部门和部门之间其实有上下级关系。一个部门下可以用多个子部门,那么部门就是一个树状结构图,如图“机构编码”很清晰看出来。
这里写图片描述
那么用户和部门的ER图
这里写图片描述
从上面可以知道部门和部门之间是一个是一对多(一个部门下有很多的子部门)和多对一的关系那么
部门表数据库设计

 create table t_s_depart(   ID                   national varchar(32) not null,  -- 部门ID   departname           national varchar(100) not null, -- 部门名称   description          national longtext, -- 部门描述   parentdepartid       national varchar(32), -- 上级级部门ID   org_code             national varchar(64), -- 部门代码 如0102   org_type             national varchar(1), -- 机构类型   primary key (ID));

JPA 实体图设计如下

 @Entity@Table(name = "t_s_depart")public class TSDepart extends IdEntity implements java.io.Serializable {    private TSDepart TSPDepart;//上级部门    private String departname;//部门名称    private String description;//部门描述    private String orgCode;//机构编码    private String orgType;//机构编码    private List<TSDepart> TSDeparts = new ArrayList<TSDepart>();//下属部门    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "parentdepartid")    public TSDepart getTSPDepart() {        return this.TSPDepart;    }    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "TSPDepart")    public List<TSDepart> getTSDeparts() {        return TSDeparts;    } 。。。。。。。

用户和部门之间是一个多对一之间的关系
用户表设计如下

 create table  `t_s_base_user` (  `ID` varchar(32) NOT NULL,    -- 用户ID  `password` varchar(100) default NULL,  `realname` varchar(50) default NULL,  `status` smallint(6) default NULL,  `username` varchar(10) NOT NULL,  `departid` varchar(32) default NULL,   -- 部门ID  PRIMARY KEY  (`ID`),  KEY `FK_15jh1g4iem1857546ggor42et` (`departid`),  CONSTRAINT `FK_15jh1g4iem1857546ggor42et` FOREIGN KEY (`departid`) REFERENCES `t_s_depart` (`ID`)) 

其实这个设计是多出许多冗余字段,应该用中间表实现(jeecg 也实现了)用户和部门之间的关系很明显的实现了

public class TSBaseUser extends IdEntity implements java.io.Serializable {            private static final long serialVersionUID = 1L;            private String userName;// 用户名            private String realName;// 真实姓名            private String browser;// 用户使用浏览器类型            private String userKey;// 用户验证唯一标示            private String password;//用户密码            private Short activitiSync;//是否同步工作流引擎            private Short status;// 状态1:在线,2:离线,0:禁用            private byte[] signature;// 签名文件    //  private TSDepart TSDepart = new TSDepart();// 部门    private List<TSUserOrg> userOrgList = new ArrayList<TSUserOrg>();    private TSDepart currentDepart = new TSDepart();// 当前部门

2.2 用户和角色

用户和角色之间是一个对多的关系。一个人可以有好多角色,可以是管理员,可以是一般的用户,
反过来讲一个角色拥有多个用户,就成了JPA最标准的多对多设计
我们当前用户登录的Admin的角色就是管理员
这里写图片描述
用户和角色之间的关系如下
这里写图片描述
借用中间表,现在是最佳实现多对多的方法 主要中间JPA实现如下
>

@Entity@Table(name = "t_s_role_user")public class TSRoleUser extends IdEntity implements java.io.Serializable {        private TSUser TSUser;        private TSRole TSRole;    @ManyToOne(fetch = FetchType.EAGER)    @JoinColumn(name = "userid")    public TSUser getTSUser() {        return this.TSUser;    }    public void setTSUser(TSUser TSUser) {        this.TSUser = TSUser;    }    @ManyToOne(fetch = FetchType.EAGER)    @JoinColumn(name = "roleid")    public TSRole getTSRole() {        return this.TSRole;    }    public void setTSRole(TSRole TSRole) {        this.TSRole = TSRole;    }}

2.3角色和菜单资源

不用的角色应该具备不同的菜单权限,管理员应该具备设置菜单的权限,操作员,应该具备就会看到这个菜单,那么菜单和角色之间又成了一个多对多之间的关系。设计思路和刚才的角色用户大体相同
我们可以看到菜单之间也是一个树状图,所以菜单的实际思路就想刚才说的部门的表。
这里写图片描述

CREATE TABLE `t_s_function` (  `ID` varchar(32) NOT NULL,  `functioniframe` smallint(6) default NULL,  `functionlevel` smallint(6) default NULL,  `functionname` varchar(50) NOT NULL,  `functionorder` varchar(255) default NULL,  `functionurl` varchar(100) default NULL,  `parentfunctionid` varchar(32) default NULL, -- 上级级菜单  `iconid` varchar(32) default NULL, -- 菜单的图标  `desk_iconid` varchar(32) default NULL, -- 菜单的图标  `functiontype` smallint(6) default NULL,  PRIMARY KEY  (`ID`),  KEY `FK_brd7b3keorj8pmxcv8bpahnxp` (`parentfunctionid`),  KEY `FK_q5tqo3v4ltsp1pehdxd59rccx` (`iconid`),  KEY `FK_gbdacaoju6d5u53rp4jo4rbs9` (`desk_iconid`),  CONSTRAINT `FK_brd7b3keorj8pmxcv8bpahnxp` FOREIGN KEY (`parentfunctionid`) REFERENCES `t_s_function` (`ID`),  CONSTRAINT `FK_gbdacaoju6d5u53rp4jo4rbs9` FOREIGN KEY (`desk_iconid`) REFERENCES `t_s_icon` (`ID`),  CONSTRAINT `FK_q5tqo3v4ltsp1pehdxd59rccx` FOREIGN KEY (`iconid`) REFERENCES `t_s_icon` (`ID`))

ER图如下
这里写图片描述
这个代码和刚才的角色和用户类似

@Entity@Table(name = "t_s_role_function")public class TSRoleFunction extends IdEntity implements java.io.Serializable {    private TSFunction TSFunction;    private TSRole TSRole;    private String operation;    private String dataRule;    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "functionid")    public TSFunction getTSFunction() {        return this.TSFunction;    }    public void setTSFunction(TSFunction TSFunction) {        this.TSFunction = TSFunction;    }    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "roleid")    public TSRole getTSRole() {        return this.TSRole;    }    public void setTSRole(TSRole TSRole) {        this.TSRole = TSRole;    }    @Column(name = "operation", length = 100)    public String getOperation() {        return this.operation;    }    public void setOperation(String operation) {        this.operation = operation;    }    @Column(name = "datarule", length = 100)    public String getDataRule() {        return dataRule;    }    public void setDataRule(String dataRule) {        this.dataRule = dataRule;    }}

2.4 菜单和资源按钮

一个菜单资源和上面会有许多按钮如图,那么很明显菜单和资源按钮之间是一对多的关联
这里写图片描述
他们是ER图和前面的很类似
这里写图片描述

public class TSOperation extends IdEntity implements java.io.Serializable {    private String operationname;    private String operationcode;    private String operationicon;    private Short status;    private TSIcon TSIcon = new TSIcon();    private TSFunction TSFunction = new TSFunction();

3 总结

我们从部门—–>用户——>角色——–>资源——–>操作按钮 他们之间的关系作了一个梳理,这个这个设计基本用到的Hibernate所有的映射关系。
这里写图片描述
jeecg还有更丰富的资源控制方法—规则引擎,等以后会详细讲解规则引擎的使用。

0 0
原创粉丝点击