From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-starter-datascope/src/main/java/org/springblade/core/datascope/handler/BladeDataScopeHandler.java | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 84 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-starter-datascope/src/main/java/org/springblade/core/datascope/handler/BladeDataScopeHandler.java b/Source/BladeX-Tool/blade-starter-datascope/src/main/java/org/springblade/core/datascope/handler/BladeDataScopeHandler.java new file mode 100644 index 0000000..b51e7ca --- /dev/null +++ b/Source/BladeX-Tool/blade-starter-datascope/src/main/java/org/springblade/core/datascope/handler/BladeDataScopeHandler.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 搴勯獮 (smallchill@163.com) + */ +package org.springblade.core.datascope.handler; + +import lombok.RequiredArgsConstructor; +import org.springblade.core.datascope.enums.DataScopeEnum; +import org.springblade.core.datascope.model.DataScopeModel; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.tool.constant.RoleConstant; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.PlaceholderUtil; +import org.springblade.core.tool.utils.StringUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 榛樿鏁版嵁鏉冮檺瑙勫垯 + * + * @author Chill + */ +@RequiredArgsConstructor +public class BladeDataScopeHandler implements DataScopeHandler { + + private final ScopeModelHandler scopeModelHandler; + + @Override + public String sqlCondition(String mapperId, DataScopeModel dataScope, BladeUser bladeUser, String originalSql) { + + //鏁版嵁鏉冮檺璧勬簮缂栧彿 + String code = dataScope.getResourceCode(); + + //鏍规嵁mapperId浠庢暟鎹簱涓幏鍙栧搴旀ā鍨� + DataScopeModel dataScopeDb = scopeModelHandler.getDataScopeByMapper(mapperId, bladeUser.getRoleId()); + + //mapperId閰嶇疆鏈彇鍒板垯浠庢暟鎹簱涓牴鎹祫婧愮紪鍙疯幏鍙� + if (dataScopeDb == null && StringUtil.isNotBlank(code)) { + dataScopeDb = scopeModelHandler.getDataScopeByCode(code); + } + + //鏈粠鏁版嵁搴撴壘鍒板搴旈厤缃垯閲囩敤榛樿 + dataScope = (dataScopeDb != null) ? dataScopeDb : dataScope; + + //鍒ゆ柇鏁版嵁鏉冮檺绫诲瀷骞剁粍瑁呭搴擲ql + Integer scopeRule = Objects.requireNonNull(dataScope).getScopeType(); + DataScopeEnum scopeTypeEnum = DataScopeEnum.of(scopeRule); + List<Long> ids = new ArrayList<>(); + String whereSql = "where scope.{} in ({})"; + if (DataScopeEnum.ALL == scopeTypeEnum || StringUtil.containsAny(bladeUser.getRoleName(), RoleConstant.ADMINISTRATOR)) { + return null; + } else if (DataScopeEnum.CUSTOM == scopeTypeEnum) { + whereSql = PlaceholderUtil.getDefaultResolver().resolveByMap(dataScope.getScopeValue(), BeanUtil.toMap(bladeUser)); + } else if (DataScopeEnum.OWN == scopeTypeEnum) { + ids.add(bladeUser.getUserId()); + } else if (DataScopeEnum.OWN_DEPT == scopeTypeEnum) { + ids.addAll(Func.toLongList(bladeUser.getDeptId())); + } else if (DataScopeEnum.OWN_DEPT_CHILD == scopeTypeEnum) { + List<Long> deptIds = Func.toLongList(bladeUser.getDeptId()); + ids.addAll(deptIds); + deptIds.forEach(deptId -> { + List<Long> deptIdList = scopeModelHandler.getDeptAncestors(deptId); + ids.addAll(deptIdList); + }); + } + return StringUtil.format("select {} from ({}) scope " + whereSql, Func.toStr(dataScope.getScopeField(), "*"), originalSql, dataScope.getScopeColumn(), StringUtil.join(ids)); + } + +} -- Gitblit v1.9.3