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-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..9bd1299f2 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 @@ -35,12 +35,22 @@ public class DataScope extends HashMap { /** * 限制范围的字段名称 */ - private String scopeName = "dept_id"; + private String scopeDeptName = "dept_id"; + + /** + * 本人权限范围字段 + */ + private String scopeUserName = "create_by"; /** * 具体的数据范围 */ - private List deptIds = new ArrayList<>(); + private List deptList = new ArrayList<>(); + + /** + * 具体查询的用户数据权限范围 + */ + private String username; /** * 是否只查询本部门 @@ -63,13 +73,8 @@ public class DataScope extends HashMap { return new DataScope(); } - public DataScope scopeName(String scopeName) { - this.scopeName = scopeName; - return this; - } - public DataScope deptIds(List deptIds) { - this.deptIds = deptIds; + this.deptList = deptIds; return this; } 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..6d3b91528 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 @@ -17,8 +17,6 @@ package com.pig4cloud.pigx.common.data.datascope; -import java.util.List; - /** * @author lengleng * @date 2019-09-07 @@ -29,9 +27,9 @@ public interface DataScopeHandle { /** * 计算用户数据权限 - * @param deptList 部门ID,如果为空表示没有任何数据权限。 + * @param dataScope 数据权限设置 * @return 返回true表示无需进行数据过滤处理,返回false表示需要进行数据过滤 */ - Boolean calcScope(List deptList); + Boolean calcScope(DataScope dataScope); } 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..0e889b87e 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 @@ -2,6 +2,7 @@ package com.pig4cloud.pigx.common.data.datascope; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import lombok.Setter; import org.apache.ibatis.executor.Executor; @@ -36,24 +37,28 @@ public class DataScopeInnerInterceptor implements DataScopeInterceptor { return; } - String scopeName = dataScope.getScopeName(); - List deptIds = dataScope.getDeptIds(); - // 优先获取赋值数据 - if (CollUtil.isEmpty(deptIds) && dataScopeHandle.calcScope(deptIds)) { - originalSql = String.format("SELECT %s FROM (%s) temp_data_scope", dataScope.getFunc().getType(), - originalSql); - mpBs.sql(originalSql); + // 返回true 不拦截直接返回原始 SQL + if (dataScopeHandle.calcScope(dataScope)) { return; } - if (deptIds.isEmpty()) { + List deptIds = dataScope.getDeptList(); + + // 1.无数据权限限制,则直接返回 0 条数据 + if (CollUtil.isEmpty(deptIds) && StrUtil.isBlank(dataScope.getUsername())) { originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE 1 = 2", dataScope.getFunc().getType(), originalSql); } + // 2.如果为本人权限则走下面 + else if (StrUtil.isNotBlank(dataScope.getUsername())) { + originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE temp_data_scope.%s = '%s'", + dataScope.getFunc().getType(), originalSql, dataScope.getScopeUserName(), dataScope.getUsername()); + } + // 3.都没有,则是其他权限,走下面 else { String join = CollectionUtil.join(deptIds, ","); originalSql = String.format("SELECT %s FROM (%s) temp_data_scope WHERE temp_data_scope.%s IN (%s)", - dataScope.getFunc().getType(), originalSql, scopeName, join); + dataScope.getFunc().getType(), originalSql, dataScope.getScopeDeptName(), join); } mpBs.sql(originalSql); 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..2b0f4caf9 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 @@ -48,16 +48,19 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { /** * 计算用户数据权限 - * @param deptList + * @param dataScope 数据权限范围 * @return */ @Override - public Boolean calcScope(List deptList) { + public Boolean calcScope(DataScope dataScope) { PigxUser user = SecurityUtils.getUser(); List roleIdList = user.getAuthorities().stream().map(GrantedAuthority::getAuthority) .filter(authority -> authority.startsWith(SecurityConstants.ROLE)) .map(authority -> authority.split(StrUtil.UNDERLINE)[1]).collect(Collectors.toList()); - // 当前用户的角色为空 + + List deptList = dataScope.getDeptList(); + + // 当前用户的角色为空 , 返回false if (CollectionUtil.isEmpty(roleIdList)) { return false; } @@ -98,6 +101,11 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle { if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) { deptList.add(user.getDeptId()); } + + // 只查询本人 + if (DataScopeTypeEnum.SELF_LEVEL.getType() == dsType) { + dataScope.setUsername(user.getUsername()); + } return false; } diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java index 943a81ca8..8fc399fcb 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxResourceServerAutoConfiguration.java @@ -64,9 +64,10 @@ public class PigxResourceServerAutoConfiguration implements ApplicationContextAw * @return OAuth2MethodSecurityExpressionHandler */ @Bean - public OAuth2MethodSecurityExpressionHandler expressionHandler(){ + public OAuth2MethodSecurityExpressionHandler expressionHandler() { OAuth2MethodSecurityExpressionHandler oAuth2MethodSecurityExpressionHandler = new OAuth2MethodSecurityExpressionHandler(); oAuth2MethodSecurityExpressionHandler.setApplicationContext(applicationContext); return oAuth2MethodSecurityExpressionHandler; } + } 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 diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml index 3e9bcf5da..60ec54f46 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -88,6 +88,7 @@ u.del_flag, u.lock_flag, u.tenant_id, + u.create_by, u.create_time ucreate_time, u.update_time uupdate_time, r.role_id, @@ -113,6 +114,7 @@ u.nickname, u.name, u.email, + u.create_by, u.create_time ucreate_time, u.update_time uupdate_time, r.role_id, @@ -158,6 +160,7 @@ u.wx_openid, u.qq_openid, u.dept_id, + u.create_by, u.create_time ucreate_time, u.update_time uupdate_time, u.del_flag, @@ -197,6 +200,7 @@ u.wx_openid, u.qq_openid, u.dept_id, + u.create_by, u.create_time ucreate_time, u.update_time uupdate_time, u.del_flag,