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还有更丰富的资源控制方法—规则引擎,等以后会详细讲解规则引擎的使用。
- jeecg权限设计的介绍
- jeecg权限设计的介绍之数据权限
- jeecg权限管理介绍表单级别数据权限
- jeecg权限管理介绍表单级别数据权限(2)
- jeecg权限管理介绍表单级别数据权限(3)
- JEECG - 基于代码生成器的J2EE智能开发框架 续五:权限设计
- 【JEECG】列表多表头的设计
- Jeecg权限控制
- Jeecg入门介绍
- JEECG简单介绍
- 【JEECG技术博文】JEECG国际化介绍
- JEECG强大的MiniDao简介及特征介绍
- 读书札记:基于RBAC的权限设计模型--RBAC介绍
- 【JEECG技术博文】JEECG 简单实例讲解权限控制
- Android权限的介绍
- JEECG部署的几个问题
- Jeecg的使用感受
- 权限设计的探讨
- 性能优化之数据库优化
- Matlab安装支持向量机(LibSVM工具)实现多分类
- HDU 1879(最小生成树问题,Prim)
- 模拟登陆加载动画的实现(一)
- Introduce to Algorithm--------pseudo code to C/C++ code(Chapter 4)
- jeecg权限设计的介绍
- C++ set的一些用法
- Cookie/Session浅谈
- 设计模式之迭代器模式
- Linux相关命令
- p122 第三章 第31题 潘璠(未完成)
- 巧用Ajax的beforeSend 提高用户体验
- 第九周上机实践项目1-复数类中的运算符重载(续 输出流运算符重载)
- sizeof-对齐-struct