diff --git a/db/2pigxx.sql b/db/2pigxx.sql index 3846d1925..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 '排序', @@ -333,6 +334,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-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; + /** * 部门名称 */ 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