From 3ff89c50e3e0f8f47942676f451a71ca343326f5 Mon Sep 17 00:00:00 2001 From: geek Date: Fri, 30 Sep 2022 14:39:38 +0800 Subject: [PATCH 1/3] fixed #4403 --- pigx-common/pigx-common-idempotent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pigx-common/pigx-common-idempotent/pom.xml b/pigx-common/pigx-common-idempotent/pom.xml index 9418bf905..3d375d701 100644 --- a/pigx-common/pigx-common-idempotent/pom.xml +++ b/pigx-common/pigx-common-idempotent/pom.xml @@ -14,7 +14,7 @@ pigx 幂等插件 - 3.16.7 + 3.17.3 From 8fd679fa676b65c0fac0f48fab2dcf9599248265 Mon Sep 17 00:00:00 2001 From: byLaptop Date: Tue, 1 Nov 2022 16:42:38 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feature:upms:=E8=8F=9C=E5=8D=95=E6=98=BE?= =?UTF-8?q?=E9=9A=90=E6=8E=A7=E5=88=B6=E5=90=8E=E7=AB=AF=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=90=97=EF=BC=8C=E6=B7=BB=E5=8A=A0visible=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E9=BB=98=E8=AE=A4=E4=B8=BA1=E6=98=BE?= =?UTF-8?q?=E7=A4=BA0=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/2pigxx.sql | 1 + .../java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java | 6 ++++++ .../pigx/admin/service/impl/SysMenuServiceImpl.java | 1 + .../src/main/resources/mapper/SysMenuMapper.xml | 2 ++ 4 files changed, 10 insertions(+) diff --git a/db/2pigxx.sql b/db/2pigxx.sql index 3846d1925..e777ac572 100644 --- a/db/2pigxx.sql +++ b/db/2pigxx.sql @@ -333,6 +333,7 @@ CREATE TABLE `sys_menu` ( `icon` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL, `sort_order` int DEFAULT '1' COMMENT '排序值', `keep_alive` char(1) CHARACTER SET utf8mb4 DEFAULT '0', + `visible` char(1) CHARACTER SET utf8mb4 DEFAULT '1', `menu_type` char(1) CHARACTER SET utf8mb4 DEFAULT '0', `create_by` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT ' ' COMMENT '创建人', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java index 89d40dec5..951d758cb 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java @@ -103,6 +103,12 @@ public class SysMenu extends Model { @ApiModelProperty(value = "路由缓冲") private String keepAlive; + /** + * 菜单显示隐藏控制 + */ + @ApiModelProperty(value = "菜单是否显示") + private String visible; + /** * 创建人 */ diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java index 792a2d8de..9f21a9f8a 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java @@ -155,6 +155,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl extra.put("label", menu.getName()); extra.put("sortOrder", menu.getSortOrder()); extra.put("keepAlive", menu.getKeepAlive()); + extra.put("visible", menu.getVisible()); node.setExtra(extra); return node; }; diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml index b90c7d164..2d0b545ce 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml @@ -31,6 +31,7 @@ + @@ -47,6 +48,7 @@ sys_menu.sort_order, sys_menu.keep_alive, sys_menu.menu_type, + sys_menu.visible, sys_menu.create_time, sys_menu.update_time, sys_menu.del_flag From d7508763678e0e59f58585aa21c902b83404f65b Mon Sep 17 00:00:00 2001 From: byLaptop Date: Wed, 2 Nov 2022 15:43:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?:features:data=E3=80=81upms:=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=9C=AC=E4=BA=BA=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=EF=BC=8Csys=5Fdept=E8=A1=A8=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0user=5Fid=E9=81=BF=E5=85=8D=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/2pigxx.sql | 1 + .../pigx/common/data/datascope/DataScope.java | 5 +++++ .../common/data/datascope/DataScopeHandle.java | 3 ++- .../datascope/DataScopeInnerInterceptor.java | 16 +++++++++++++--- .../common/data/datascope/DataScopeTypeEnum.java | 7 ++++++- .../datascope/PigxDefaultDatascopeHandle.java | 8 +++++++- .../pig4cloud/pigx/admin/api/entity/SysDept.java | 5 +++++ 7 files changed, 39 insertions(+), 6 deletions(-) diff --git a/db/2pigxx.sql b/db/2pigxx.sql index e777ac572..e9c86b91b 100644 --- a/db/2pigxx.sql +++ b/db/2pigxx.sql @@ -8,6 +8,7 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( + `dept_id` bigint NOT NULL, `dept_id` bigint NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL, `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序', diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java index f8870aea6..d05c9708e 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java @@ -37,6 +37,11 @@ public class DataScope extends HashMap { */ private String scopeName = "dept_id"; + /** + * 本人权限范围字段 + */ + private String userId = "user_id"; + /** * 具体的数据范围 */ diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeHandle.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeHandle.java index 09f80e964..d6492ee40 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeHandle.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeHandle.java @@ -30,8 +30,9 @@ public interface DataScopeHandle { /** * 计算用户数据权限 * @param deptList 部门ID,如果为空表示没有任何数据权限。 + * @param userId userId * @return 返回true表示无需进行数据过滤处理,返回false表示需要进行数据过滤 */ - Boolean calcScope(List deptList); + Boolean calcScope(List deptList,StringBuilder userId); } diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInnerInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInnerInterceptor.java index f6d7800ce..df7503699 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInnerInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInnerInterceptor.java @@ -35,21 +35,31 @@ public class DataScopeInnerInterceptor implements DataScopeInterceptor { if (dataScope == null) { return; } + // 查询个人权限字段名称 + String scopeUserId = dataScope.getUserId(); + StringBuilder userid = new StringBuilder(); String scopeName = dataScope.getScopeName(); List deptIds = dataScope.getDeptIds(); // 优先获取赋值数据 - if (CollUtil.isEmpty(deptIds) && dataScopeHandle.calcScope(deptIds)) { + if (CollUtil.isEmpty(deptIds) && dataScopeHandle.calcScope(deptIds,userid)) { originalSql = String.format("SELECT %s FROM (%s) temp_data_scope", dataScope.getFunc().getType(), originalSql); mpBs.sql(originalSql); return; } - - if (deptIds.isEmpty()) { + //检查是否有数据权限校验 + //1.无数据权限限制,则直接返回全部 + if (deptIds.isEmpty()&&(userid.length()==0)) { originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE 1 = 2", dataScope.getFunc().getType(), originalSql); } + //2.如果为本人权限则走下面 + else if (userid.length() == 1) { + originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE temp_data_scope.%s = %s", + dataScope.getFunc().getType(), originalSql, scopeUserId, userid); + } + //3.都没有,则是其他权限,走下面 else { String join = CollectionUtil.join(deptIds, ","); originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE temp_data_scope.%s IN (%s)", diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeTypeEnum.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeTypeEnum.java index 08be66d9f..0dbacefb8 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeTypeEnum.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeTypeEnum.java @@ -48,7 +48,12 @@ public enum DataScopeTypeEnum { /** * 本级 */ - OWN_LEVEL(3, "本级"); + OWN_LEVEL(3, "本级"), + + /** + * 本人 + */ + SELF_LEVEL(4, "本人"); /** * 类型 diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java index 7dcdb64e6..13ef8b66e 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/PigxDefaultDatascopeHandle.java @@ -49,10 +49,11 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { /** * 计算用户数据权限 * @param deptList + * @param userId 个人权限用户 * @return */ @Override - public Boolean calcScope(List deptList) { + public Boolean calcScope(List deptList,StringBuilder userId) { PigxUser user = SecurityUtils.getUser(); List roleIdList = user.getAuthorities().stream().map(GrantedAuthority::getAuthority) .filter(authority -> authority.startsWith(SecurityConstants.ROLE)) @@ -98,6 +99,11 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) { deptList.add(user.getDeptId()); } + + // 只查询本人 + if (DataScopeTypeEnum.SELF_LEVEL.getType() == dsType) { + userId.append(user.getId()); + } return false; } diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java index 8e4f6cf97..2e33dcc71 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java @@ -49,6 +49,11 @@ public class SysDept extends Model { @ApiModelProperty(value = "部门id") private Long deptId; + /** + * 添加用户的用户id(防止报错) + */ + private Long userId; + /** * 部门名称 */