列表数据权限用法
===
**目录索引:**
- 功能说明
- 数据权限两种编码模式
- 数据权限规则篇
1. 当前用户上下文变量
2. 建表规范(系统标准字段)
3. 组织机构邮编规则
- 案例一(行级别 – 限制demo用户不能看admin的数据)
- 案例二(行级权限 - 登录人只能看自己数据)
- 案例三(行级权限 - 登录人可看下级所有人数据)
- 案例四(列级别权限 – 不同的人看到数据列表不同的列)
- 采用Minidao方式权限集成
1. 权限配置规则
2. 权限生成SQL规则获取方法
# JEECG 数据权限用法
## 一、功能说明
列表数据权限,主要通过数据权限控制行数据,让不同的角色有不同的访问规则;
比如: 销售人员只能看自己的数据;销售经理可以看所有下级销售人员的数据;财务只看金额大于5000的数据等等;
## 二、数据权限两种编码模式
### 数据权限控制分两种模式(根据编码风格)
**模式一:** 列表查询采用hibernate方式编码,hibernate实体,查询采用Jeecg的查询过滤器。
**实现原理:**数据权限规则,是通过查询过滤器注入的,JEECG讲数据权限规则以Hiberate方式注入到查询条件中;该方式比较简单,不需要额外编码,直接权限配置即可;
**模式二:** 列表查询采用minidao方式(纯sql)编码,此方式比较复杂需要专题介绍
**实现原理:**Jeecg会将数据权限规则,组织成纯sql片段,放在request线程中,需要开发者,手工编码注入查询逻辑中,此模式复杂会有专题讲解。
```
规则字段配置说明(非常重要):
模式一:[规则字段]对应着hibernate实体的字段,一般是驼峰写法
模式二:[规则字段]对应着数据库表的字段,一般是带下划线
③条件规则:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
④规则值:指定值 ( 固定值/系统上下文变量 )
```
## 三、数据权限规则篇
### 1.当前用户上下文变量
注意:数据权限配置,规则值可以填写系统上下文变量(当前登录人信息),从而根据当前登录人信息进行权限控制。
| 编码| 描述 |
| -------- | ----- |
| sys_user_code| 当前登录用户登录账号|
| sys_user_name| 当前登录用户真实名称|
| sys_date| 当前系统日期|
| sys_time| 当前系统时间|
| sys_company_code| 当前登录用户公司编号|
| sys_org_code| 当前登录用户部门编号|
规则值,配置写法如下:#{sys_user_code}
### 2.建表规范(系统标准字段)
如果需要通过当前登录人,进行数据权限控制,则业务表必须有以下系统标准字段;数据添加和编辑,jeecg会通过拦截器自动注入操作人的信息。
比如:创建人,创建时间,创建人所属部门、创建人所属公司,有了这些标准字段,就可以通过当前登录人进行数据隔离控制;
| 字段英文名| 字段中文名|
| -------- | ----- | ---- |
| CREATE_BY| 系统用户登录账号|
| CREATE_NAME| 系统用户真实名字|
| SYS_ORG_CODE| 登录用户所属部门|
| SYS_COMPANY_CODE| 登录用户所属公司|
### 3.组织机构邮编规则
JEECG组织机构支持无线层级,上下级关系通过组织机构编码实现,组织机构编码规则类似邮编方式,看下图;
邮编规则优势: 邮编规则,上下级编码固定规律,便于定位下级和上级;
![](https://img.kancloud.cn/12/d7/12d7c96e0edbbb3ccef6b75cb37573b8_1021x560.png)
## 四、案例一(行级别 – 限制demo用户不能看admin的数据)
### 1.数据权限案例
通过权限控制,限制demo角色用户,无法查看用户列表中admin这条数据。
![](https://img.kancloud.cn/81/c9/81c985d29044f70a58da0e0768eef625_896x496.png)
### 2.数据权限菜单配置
创建数据权限类型菜单(注意:列表访问链接和数据请求链接不是一个,此为加载数据请求)
注意: 这里很容易配置错误,一定注意
用户数据请求地址:userController.do?datagrid
![](https://img.kancloud.cn/36/ca/36ca81775e360ef692fc94c0ad492e46_727x576.png)
![](https://img.kancloud.cn/5f/0e/5f0e725fc049fabefa0079a88ed356cc_1369x667.png)
### 3.数据权限控制规则配置
**配置1、条件规则为非自定义sql表达式**
![](https://img.kancloud.cn/e4/e3/e4e3d6a383fd2330ecda48f73eb6516b_729x488.png)
填写说明:
①规则名称:随意定义
②规则字段:[字段名称]
**注意:
模式一:[字段名称]对应着hibernate实体的字段
模式二:[字段名称]对应着数据库表的字段**
③条件规则:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
④规则值:指定值 ( 固定值/系统上下文变量 )
**例如:**
规则名称:用户数据限制
规则字段:userName
条件规则:不等于
规则值:admin
以上表单权限规则表示将动态追加sql条件: userName !=‘admin’的条件,即按照用户账号!=admin进行了数据权限控制。
**配置2、条件规则为自定义sql表达式,规则值为自定义sql的条件语句**
**例如:**
要想筛选年龄小于18岁且身高大于180的数据即直接配置规则值为:
age < 18 and height >180
其中age和height均为数据库表字段名
![ ](https://img.kancloud.cn/11/fd/11fdafe9d17a6c4e803e735bd1b42bc1_910x596.png)
### 4.数据权限授权角色
①菜单访问授权
用户管理菜单;
②数据权限授权
用户列表数据数据菜单,数据规则权限授权;
![](https://img.kancloud.cn/37/aa/37aa9ea3147b3a8b058dd2cc820d8081_1379x665.png)
### 5.测试数据权限效果
采用demo用户(授权demo角色)登录系统,访问用户列表,
效果如下,看不到admin用户数据,说明权限生效
![](https://img.kancloud.cn/5e/d2/5ed23f9824c7bc7655afb44bf560ee38_894x404.png)
## 五、案例二(行级权限 - 登录人只能看自己数据)
### 1.数据权限案例
通过登录人账号,进行数据权限过滤,限制销售人员只能看自己的业务数据。
通过admin查看“列表标签”功能如下(数据提前准备,分别采用demo、scott两个用户创建)
![](https://img.kancloud.cn/05/45/0545ac5d15fdcdafa67cf65640db9349_1508x595.png)
### 2.数据权限规则配置
控制请求: jeecgListDemoController.do?datagrid
![](https://img.kancloud.cn/b9/a8/b9a8026081a95703925404a292049eca_1377x615.png)
![](https://img.kancloud.cn/16/ac/16ac6ba0f5c59b92a8e38c2e1ee02af7_730x491.png)
### 3.数据权限授权角色
①菜单访问权限
列表标签菜单;
②数据权限菜单
Jeecg demo数据权限列表,数据权限规则授权;
![](https://img.kancloud.cn/2f/be/2fbef5c61afcd9d2a4f6d67e2fa04e61_1368x577.png)
### 4.测试数据权限效果
采用demo用户(授权demo角色)登录系统,查看菜单【常用实例-列表标签】功能,只能看到自己的数据,说明权限生效。
![ ](https://img.kancloud.cn/12/41/12418da542d474ede55a0cb7ec51db39_1417x397.png)
## 六、案例三(行级权限 - 登录人可看下级所有人数据)
### 1.数据权限案例
创建三个用户scott、lisi、demo,设置demo、scott为销售人员岗位,设置lisi为销售经理属于demo和scott上级,通过权限配置lisi可看下级和自己的业务数据;
采用admin用户,查看“列表标签”菜单,可以看所有用户数据
![](https://img.kancloud.cn/00/7b/007b16adfc0859db4fa212759e36e7df_1202x381.png)
### 2.数据规则配置原理
通过登录人所属部门,进行数据权限配置,查询业务数据通过{创建部门编码}字段,与{当前登录人部门编码}进行模糊匹配;
例如:当前登录人所属部门编码:A01A02
因为JEECG设计组织机构编码都是按照邮编方式组织上下级。
![](https://img.kancloud.cn/90/c5/90c544b9b74257d3c9527aebae0a5935_704x118.png)
他的下级部门可以用SQL这样表示:
sysOrgCode like ‘A01A02%’
### 3.基础数据准备
①用户分配组织机构
针对demo、scott用户分配销售人员岗位,针对lisi用户分配销售经理岗位
![](https://img.kancloud.cn/49/84/498441f4674a96ec78e5f25fe6f50635_496x143.png)
②组织机构规则如下,lisi为demo、scott上级。
![](https://img.kancloud.cn/a6/a7/a6a7f4a3191857d523164ccb3231a055_709x179.png)
③录入业务数据
使用scott、demo两个用户录入数据
![](https://img.kancloud.cn/ae/a5/aea5951c25d08cd2d0299960f786881d_1018x221.png)
### 4.数据权限规则配置
![ ](https://img.kancloud.cn/6a/bc/6abcc7cd274ecfd0c80590f117c6f359_1353x555.png)
![](https://img.kancloud.cn/6b/83/6b83abd712a1041cce54b140062c7368_731x499.png)
说明:通过模糊规则,类似 like ‘{当前登录人组织机构}%’
### 5.数据权限授权角色
设置lisi用户为经理角色,对角色分配数据权限
![](https://img.kancloud.cn/5e/79/5e7957a072863743c7940c8fe0842f13_1373x584.png)
### 6.测试数据权限效果
通过lisi用户登录后台,查看“列表标签”功能,发现可以看到scott、demo用户录入的数据,说明数据权限生效。
![](https://img.kancloud.cn/a9/36/a936be80463e25890f6981a13363f3b5_1395x343.png)
## 七、案例四 (列级别权限 – 不同的人看到数据列表不同的列)
### 1.功能说明
列级别权限,主要针对数据列字段进行权限控制,从而实现不同角色可以有不同列字段查看权限;
### 2.列级别权限案例
通过列数据权限,限制demo角色,不能查看列字段[电话]
通过admin用户查看“标签列表”功能,界面如下:
![](https://img.kancloud.cn/79/b5/79b5202ec2a55a85bf1ece27b9143053_1259x355.png)
### 3.列表页面编码规则
设置标签参数field,对应页面控制编码;
![](https://img.kancloud.cn/c5/fe/c5fead2a5b3241e437b72be0266b6724_1118x320.png)
### 4.列表行权限控件配置
![](https://img.kancloud.cn/84/bc/84bcdfef148cce67299ea88dc8ec9c7e_1578x598.png)
![](https://img.kancloud.cn/2e/20/2e20ed231a86232d260e66a628f90975_910x605.png)
![](https://img.kancloud.cn/0e/51/0e51bebeb453108b7b304093938f77bc_715x91.png)
工资查看权限录入同之
### 5.列表行数据权限授权角色
![](https://img.kancloud.cn/98/7a/987a96dc8711e859d8f5f4139a85b4ab_1498x635.png)
### 6.测试列表行数据权限效果
采用demo用户(授权demo角色)登录系统,访问“标签列表”,
效果如下,已经看不到手机号字段,说明列表级权限控制成功。
![](https://img.kancloud.cn/fc/cc/fcccc6060efb2534aa89fbc2b8225822_1357x392.png)
## 八、采用Minidao方式权限集成
### 1.权限配置规则
说明:SQL方式数据权限规则一般采用Minidao实现数据操作,当然也可以是其他纯SQL方式,配置对应数据库表的字段,非实体字段
![](https://img.kancloud.cn/fb/70/fb709e9b0aaaa5e7665fc0670d9638ea_1424x720.png)
### 2.权限生成SQL规则获取方法
通过工具类org.jeecgframework.core.util.JeecgDataAutorUtils
![](https://img.kancloud.cn/8d/6b/8d6b7f5e02001e43e6d6cccbe07da5fe_697x393.png)
通过方法:JeecgDataAutorUtils.loadDataSearchConditonSQLString(),可以直接获取配置的权限对应的sql规则。
- 总体介绍
- 快速了解
- 平台优势
- 技术支持
- 社区荣誉
- 开发环境准备
- JEECG私服Maven
- 代码结构说明
- 入门开发环境搭建
- 开发工具
- 代码生成器使用
- GUI代码生成器
- Online代码生成器
- P3插件代码生成器
- 代码生成器配置
- 功能介绍
- 权限开发手册
- Online开发权限
- Online表单访问规则
- 列表按钮权限控制
- 列表数据权限控制
- 页面表单权限控制(一对多表)
- 页面表单权限控制(单表)
- 其他
- 二级管理员手册
- 接口权限配置
- 平台权限设计总览
- 编码开发方式
- 列表按钮权限用法
- 列表数据权限用法
- 数据权限自定义SQL
- 表单权限用法
- UI标签库文档
- AuthFilter(页面权限标签)
- Autocomplete(自动补全标签)
- BaseTag(样式和JS引入标签)
- Choose(弹出选择标签)
- ComboTree(下拉树形选择框)
- Datagrid(数据列表标签)
- DepartSelectTag(部门树选择标签)
- DictSelect(数据字典下拉选择框)
- FormValidation(表单提交及验证标签)
- HasPermissionTag(页面权限标签)
- Menu(左侧菜单生成标签)
- MutiLang(国际化标签)
- OrgSelectTag(部门树列表选择标签)
- SelectZTree(Ztree树控件)
- Tabs(选项卡父标签)
- TreeSelectTag树分类标签
- Upload(上传标签)
- UserSelectTag(用户选择标签)
- WebUploader(上传标签)
- 查询构造器
- 查询过滤器
- 高级查询构造器
- 专题功能介绍
- 国际化使用
- 多数据源使用
- 定时任务
- 平台JWT接口文档
- 消息中心
- Online在线开发
- Online二次开发
- Online代码生成
- Online唯一性校验配置
- Online查询机制(数据权限)
- Online树形表单配置
- Online表单填值规则
- Online表单对外接口
- Online表单控件
- Online表单配置
- Online表单高级应用
- Online报表开发
- Online图形报表配置
- Online数据报表配置
- Online移动报表配置
- 自定义表单设计
- 自定义表单权限
- 列表空间权限控制
- 功能介绍
- 常规控件权限控制
- 自定义表单配置
- 自定义表单二次开发
- 自定义表单控件
- 自定义表单数据源
- 自定义表单模板
- 自定义表单配置
- 自定义表单高级应用
- 表单数据维护
- 附录小技巧
- datagrid扩展属性用法
- Formvalid新增属性tiptype的使用
- JEECG单点集成文档
- Jeecg定时任务开发
- JEECG常见问题贴
- Redis与Ehcache切换文档
- Toolbar自定义js参数规则
- UI标签规则
- 列表多表头的设计
- 列表拓展字段展示
- 列表自定义查询条件
- 员工入职开发规范文档V1.0
- 数据列表合计功能
- 登录权限拦截器排除方法
- 组织机构导入功能使用说明
- 表单字段重复校验方法
- JEECG新技术
- 新版UI技术方案