Browse Source

数据权限过滤

dev-V1.0.1
庄锐波 4 months ago
parent
commit
f96cc6cda1
  1. 26
      doc/执法码数据权限过滤使用说明.md
  2. 1
      script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql

26
doc/执法码数据权限过滤使用说明.md

@ -1,11 +1,17 @@
# 执法码数据权限过滤使用说明
## 1. 虚拟单位树(efcode_virtual_unit)数据模型
## 1. 虚拟单位树(efcode_virtual_unit)数据模型,将一期通过程序生成的执法单位树,改变成为实际存储在数据库中的关系,形成实际上的上下级关系
![执法单位设置.png](%E6%89%A7%E6%B3%95%E5%8D%95%E4%BD%8D%E8%AE%BE%E7%BD%AE.png)![架构图](./images/architecture.png![执法单位设置.png](%E6%89%A7%E6%B3%95%E5%8D%95%E4%BD%8D%E8%AE%BE%E7%BD%AE.png))
数据权限过滤的核心依赖是 **虚拟单位树**(表 `efcode_virtual_unit`),它构建了一棵与实际部门关联的逻辑组织树,用于控制数据可见范围。
* 所有的业务相关的表中都加上3个字段
* bureau_dept_id:执法单位ID(当前用户所在的执法单位的id)=DataFilterUtil.getUserBureauDeptId
* dept_id:部门ID(当前用户所在的部门id)=DataFilterUtil.getUserDeptId
* organ_id:组织单位ID (当前用户所在的组织单位id)=DataFilterUtil.getUserOrganId
* 对应的名称作为可选项,自行决定加不加
### 1.1 表结构(EfcodeVirtualUnit / EfcodeVirtualUnitVo)
| 字段 | 类型 | 说明 |
@ -204,20 +210,20 @@ public TableDataInfo<TestEnfDemoVo> directFilterPageList(TestEnfDemoBo bo, PageQ
### 5.1 权限判断方法
| 方法签名 | 返回值 | 说明 |
|----------|--------|------|
| `isFullAccess()` | `boolean` | 判断当前用户是否全部放行(超管或 ViewAllDataRole) |
| `needFilter()` | `boolean` | 判断当前用户是否需要数据过滤(拥有 ViewFilterDataRole) |
| `hasNoAccess()` | `boolean` | 判断当前用户是否无权访问(既非放行也非过滤) |
| `getUserAccessibleDeptIds(includeStatistics, includeSearch)` | `List<String>` | 获取当前用户可访问的 sys_dept_id 列表(null=全放行,空=无权) |
| `getFilteredDeptIdsForCurrentUser(includeStatistics, includeSearch)` | `List<String>` | 获取 ViewFilterDataRole 用户在虚拟单位树中对应节点及子孙的 sys_dept_id |
| 方法签名 | 返回值 | 说明 |
|---------------------------------------------------------------------|--------|------|
| `isFullAccess()` | `boolean` | 判断当前用户是否全部放行(超管或 ViewAllDataRole) |
| `needFilter()` | `boolean` | 判断当前用户是否需要数据过滤(拥有 ViewFilterDataRole) |
| `hasNoAccess()` | `boolean` | 判断当前用户是否无权访问(既非放行也非过滤) |
| `getUserAccessibleDeptIds` | `List<String>` | 获取当前用户可访问的 sys_dept_id 列表(null=全放行,空=无权) |
| `getFilteredDeptIdsForCurrentUser` | `List<String>` | 获取 ViewFilterDataRole 用户在虚拟单位树中对应节点及子孙的 sys_dept_id |
### 5.2 子孙节点查询方法
| 方法签名 | 返回值 | 说明 |
|----------|--------|------|
| `getDescendantDeptIds(virId, includeSearch, includeStatistics, includeBusiness)` | `List<String>` | 获取指定 virId 下所有子孙节点的 sys_dept_id(已去重) |
| `getDescendantVirIds(virId, includeSearch, includeStatistics, includeBusiness)` | `List<String>` | 获取指定 virId 下所有子孙节点的 vir_id(已去重) |
| `getDescendantDeptIds` | `List<String>` | 获取指定 virId 下所有子孙节点的 sys_dept_id(已去重) |
| `getDescendantVirIds` | `List<String>` | 获取指定 virId 下所有子孙节点的 vir_id(已去重) |
参数说明:
- `virId`:起始节点的虚拟单位ID(如 `DataFilterUtil.SHENZHEN_AREAS`

1
script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql

@ -14,6 +14,7 @@ CREATE TABLE `efcode_cp_plan`
`is_union` tinyint NOT NULL DEFAULT 1 COMMENT '是否联合执法 1=是 0=否',
`union_dept` varchar(500) DEFAULT NULL COMMENT '联合执法单位(多个逗号分隔)',
`reserve_status` tinyint NOT NULL DEFAULT 0 COMMENT '预约状态 0=待预约 1=预约中 2=预约完成 3=停止预约',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',

Loading…
Cancel
Save