diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java index d0018e5069..ccfc9857f2 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java @@ -5,8 +5,8 @@ import org.apache.ibatis.annotations.Param; public interface ExtSysAuthMapper { - Boolean checkTreeNoManageCount(@Param("userId") Long userId , @Param("modelType") String modelType, @Param("nodeId") String nodeId); - + Boolean checkTreeNoManageCount(@Param("userId") Long userId, @Param("modelType") String modelType, @Param("nodeId") String nodeId); + String copyAuth(@Param("authSource") String authSource, @Param("authSourceType") String authSourceType, @Param("authUser") String authUser); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml index 7386356dfe..16a50c7997 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml @@ -14,4 +14,8 @@ select if(CHECK_TREE_NO_MANAGE_PRIVILEGE(#{userId},#{modelType},#{nodeId})>0,1,0) + + diff --git a/backend/src/main/java/io/dataease/commons/constants/SysAuthConstants.java b/backend/src/main/java/io/dataease/commons/constants/SysAuthConstants.java new file mode 100644 index 0000000000..a541e0f488 --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/constants/SysAuthConstants.java @@ -0,0 +1,16 @@ +package io.dataease.commons.constants; + +/** + * Author: wangjiahao + * Date: 2022/4/2 + * Description: + */ +public class SysAuthConstants { + + public final static String AUTH_SOURCE_TYPE_PANEL = "panel"; + + public final static String AUTH_SOURCE_TYPE_DATASET = "dataset"; + + public final static String AUTH_SOURCE_TYPE_DATASOURCE = "link"; + +} diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index 1b07685c82..cdc13d7d74 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -7,6 +7,7 @@ import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; import io.dataease.commons.constants.AuthConstants; import io.dataease.commons.constants.DePermissionType; +import io.dataease.commons.constants.SysAuthConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.TreeUtils; @@ -54,8 +55,10 @@ public class DataSetGroupService { datasetGroup.setCreateBy(AuthUtils.getUser().getUsername()); datasetGroup.setCreateTime(System.currentTimeMillis()); datasetGroupMapper.insert(datasetGroup); + String userName = AuthUtils.getUser().getUsername(); // 清理权限缓存 CacheUtils.removeAll(AuthConstants.USER_PERMISSION_CACHE_NAME); + sysAuthService.copyAuth(datasetGroup.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASET); } else { datasetGroupMapper.updateByPrimaryKeySelective(datasetGroup); } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 48cf75ce9d..f4ae1d03d2 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -33,6 +33,7 @@ import io.dataease.provider.datasource.JdbcProvider; import io.dataease.provider.DDLProvider; import io.dataease.provider.QueryProvider; import io.dataease.service.engine.EngineService; +import io.dataease.service.sys.SysAuthService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -102,6 +103,8 @@ public class DataSetTableService { private PermissionService permissionService; @Resource private EngineService engineService; + @Resource + private SysAuthService sysAuthService; private static boolean isUpdatingDatasetTableStatus = false; private static final String lastUpdateTime = "${__last_update_time__}"; @@ -261,6 +264,10 @@ public class DataSetTableService { datasetTable.setCreateBy(AuthUtils.getUser().getUsername()); datasetTable.setCreateTime(System.currentTimeMillis()); int insert = datasetTableMapper.insert(datasetTable); + // 清理权限缓存 + CacheUtils.removeAll(AuthConstants.USER_PERMISSION_CACHE_NAME); + sysAuthService.copyAuth(datasetTable.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASET); + // 添加表成功后,获取当前表字段和类型,抽象到dataease数据库 if (insert == 1) { saveTableField(datasetTable); diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index ee31edf8c3..4d20e3c26b 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -11,6 +11,7 @@ import io.dataease.base.mapper.DatasourceMapper; import io.dataease.base.mapper.ext.ExtDataSourceMapper; import io.dataease.base.mapper.ext.query.GridExample; import io.dataease.commons.constants.DePermissionType; +import io.dataease.commons.constants.SysAuthConstants; import io.dataease.commons.exception.DEException; import io.dataease.commons.model.AuthURD; import io.dataease.commons.utils.AuthUtils; @@ -34,6 +35,7 @@ import io.dataease.provider.datasource.ApiProvider; import io.dataease.provider.datasource.DatasourceProvider; import io.dataease.service.dataset.DataSetGroupService; import io.dataease.service.message.DeMsgutil; +import io.dataease.service.sys.SysAuthService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -57,6 +59,8 @@ public class DatasourceService { private DataSetGroupService dataSetGroupService; @Resource private CommonThreadPool commonThreadPool; + @Resource + private SysAuthService sysAuthService; private static List dsTypes = Arrays.asList("TiDB", "StarRocks", "excel", "mysql", "hive", "impala", "mariadb", "ds_doris", "pg", "sqlServer", "oracle", "mongo", "ck", "db2", "es", "redshift", "api"); @DeCleaner(DePermissionType.DATASOURCE) @@ -73,6 +77,7 @@ public class DatasourceService { checkAndUpdateDatasourceStatus(datasource); datasourceMapper.insertSelective(datasource); handleConnectionPool(datasource, "add"); + sysAuthService.copyAuth(datasource.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASOURCE); return datasource; } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 1f1c51a8f0..f9f869f5fa 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -6,10 +6,7 @@ import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.*; import io.dataease.base.mapper.*; import io.dataease.base.mapper.ext.*; -import io.dataease.commons.constants.AuthConstants; -import io.dataease.commons.constants.CommonConstants; -import io.dataease.commons.constants.DePermissionType; -import io.dataease.commons.constants.PanelConstants; +import io.dataease.commons.constants.*; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.LogUtil; import io.dataease.commons.utils.TreeUtils; @@ -31,6 +28,7 @@ import io.dataease.service.dataset.DataSetTableService; import io.dataease.service.sys.SysAuthService; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.pentaho.di.core.util.UUIDUtil; import org.slf4j.Logger; @@ -94,7 +92,6 @@ public class PanelGroupService { @Resource private ExtPanelGroupExtendDataMapper extPanelGroupExtendDataMapper; - public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); panelGroupRequest.setUserId(userId); @@ -110,22 +107,21 @@ public class PanelGroupService { } @DeCleaner(DePermissionType.PANEL) -// @Transactional public PanelGroup saveOrUpdate(PanelGroupRequest request) { + String userName = AuthUtils.getUser().getUsername(); String panelId = request.getId(); if(StringUtils.isNotEmpty(panelId)){ panelViewService.syncPanelViews(request); } - if (StringUtils.isEmpty(panelId)) { - // 新建 + if (StringUtils.isEmpty(panelId)) { // 新建 checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_INSERT, null, request.getNodeType()); panelId = newPanel(request); panelGroupMapper.insert(request); // 清理权限缓存 clearPermissionCache(); - } else if ("toDefaultPanel".equals(request.getOptType())) { + sysAuthService.copyAuth(panelId, SysAuthConstants.AUTH_SOURCE_TYPE_PANEL); + } else if ("toDefaultPanel".equals(request.getOptType())) { // 转存为默认仪表板 panelId = UUID.randomUUID().toString(); - // 转存为默认仪表板 PanelGroupWithBLOBs newDefaultPanel = panelGroupMapper.selectByPrimaryKey(request.getId()); newDefaultPanel.setPanelType(PanelConstants.PANEL_TYPE_SYSTEM); newDefaultPanel.setNodeType(PanelConstants.PANEL_NODE_TYPE_PANEL); @@ -139,10 +135,12 @@ public class PanelGroupService { panelGroupMapper.insertSelective(newDefaultPanel); // 清理权限缓存 clearPermissionCache(); + sysAuthService.copyAuth(panelId, SysAuthConstants.AUTH_SOURCE_TYPE_PANEL); } else if ("copy".equals(request.getOptType())) { panelId = this.panelGroupCopy(request, null, true); // 清理权限缓存 clearPermissionCache(); + sysAuthService.copyAuth(panelId, SysAuthConstants.AUTH_SOURCE_TYPE_PANEL); } else if ("move".equals(request.getOptType())) { PanelGroupWithBLOBs panelInfo = panelGroupMapper.selectByPrimaryKey(request.getId()); if (panelInfo.getPid().equalsIgnoreCase(request.getPid())) { @@ -447,5 +445,4 @@ public class PanelGroupService { CacheUtils.removeAll(AuthConstants.DEPT_PANEL_NAME); } - } diff --git a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java index 43478aaa32..f2d440b67c 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java @@ -20,4 +20,9 @@ public class SysAuthService { } } + public void copyAuth(String authSource,String authSourceType){ + String userName = AuthUtils.getUser().getUsername(); + extSysAuthMapper.copyAuth(authSource,authSourceType,userName); + } + } diff --git a/backend/src/main/resources/db/migration/V33__1.9.sql b/backend/src/main/resources/db/migration/V33__1.9.sql index 8a7956f258..8cc46a3726 100644 --- a/backend/src/main/resources/db/migration/V33__1.9.sql +++ b/backend/src/main/resources/db/migration/V33__1.9.sql @@ -101,9 +101,7 @@ ADD COLUMN `copy_from` varchar(255) NULL COMMENT '复制来源' AFTER `update_ti ADD COLUMN `copy_id` varchar(255) NULL COMMENT '复制ID' AFTER `copy_from`; --- ---------------------------- --- Function structure for copy_auth --- ---------------------------- + DROP FUNCTION IF EXISTS `copy_auth`; delimiter ;; CREATE FUNCTION `copy_auth`(authSource varchar(255),authSourceType varchar(255),authUser varchar(255)) @@ -130,25 +128,25 @@ select id from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth delete from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth_source_type=authSourceType; INSERT INTO sys_auth ( - id, - auth_source, - auth_source_type, - auth_target, - auth_target_type, - auth_time, - auth_user + id, + auth_source, + auth_source_type, + auth_target, + auth_target_type, + auth_time, + auth_user ) VALUES - ( - authId, - authSource, - authSourceType, - userId, - 'user', - unix_timestamp( - now())* 1000,'auto'); + ( + authId, + authSource, + authSourceType, + userId, + 'user', + unix_timestamp( + now())* 1000,'auto'); - INSERT INTO sys_auth_detail ( + INSERT INTO sys_auth_detail ( id, auth_id, privilege_name, @@ -175,50 +173,52 @@ VALUES insert into sys_auth( id, - auth_source, - auth_source_type, - auth_target, - auth_target_type, - auth_time, - auth_user, - copy_from, - copy_id + auth_source, + auth_source_type, + auth_target, + auth_target_type, + auth_time, + auth_user, + copy_from, + copy_id ) SELECT - uuid() as id, - authSource as auth_source, - authSourceType as auth_source_type, - auth_target, - auth_target_type, - NOW()* 1000 as auth_time, - 'auto' as auth_user, - id as copy_from, - copyId as copy_id + uuid() as id, + authSource as auth_source, + authSourceType as auth_source_type, + auth_target, + auth_target_type, + NOW()* 1000 as auth_time, + 'auto' as auth_user, + id as copy_from, + copyId as copy_id FROM - sys_auth + sys_auth WHERE - auth_source IN ( - SELECT - pid - FROM - v_auth_model - WHERE - id = authSource - AND model_type = authSourceType - ) - AND auth_source_type = authSourceType; + auth_source = ( + SELECT + pid + FROM + v_auth_model + WHERE + id = authSource + AND model_type = authSourceType + ) + AND auth_source_type = authSourceType + and concat(auth_target,'-',auth_target_type) !=CONCAT(userId,'-','user'); + INSERT INTO sys_auth_detail ( - id, - auth_id, - privilege_name, - privilege_type, - privilege_value, - privilege_extend, - remark, - create_user, - create_time, - copy_from, - copy_id + id, + auth_id, + privilege_name, + privilege_type, + privilege_value, + privilege_extend, + remark, + create_user, + create_time, + copy_from, + copy_id ) SELECT uuid() AS id, sa_copy.t_id AS auth_id, @@ -233,16 +233,38 @@ now())* 1000 AS create_time, id AS copy_from, copyId AS copy_id FROM - sys_auth_detail - INNER JOIN ( - SELECT - id AS t_id, - copy_from AS s_id - FROM - sys_auth - WHERE - copy_id = copyId - ) sa_copy ON sys_auth_detail.auth_id = sa_copy.s_id; + sys_auth_detail + INNER JOIN ( + SELECT + id AS t_id, + copy_from AS s_id + FROM + sys_auth + WHERE + copy_id = copyId + ) sa_copy ON sys_auth_detail.auth_id = sa_copy.s_id; + +RETURN 'success'; + +END +;; +delimiter ; + +-- ---------------------------- +-- Function structure for delete_auth_source +-- ---------------------------- +DROP FUNCTION IF EXISTS `delete_auth_source`; +delimiter ;; +CREATE FUNCTION `delete_auth_source`(authSource varchar(255),authSourceType varchar(255)) + RETURNS varchar(255) CHARSET utf8mb4 + READS SQL DATA +BEGIN + +delete from sys_auth_detail where auth_id in ( +select id from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth_source_type=authSourceType +); + +delete from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth_source_type=authSourceType; RETURN 'success'; @@ -336,3 +358,8 @@ CREATE TABLE `panel_outer_params_target_view_info` ( SET FOREIGN_KEY_CHECKS = 1; update `my_plugin` set `name` = 'X-Pack默认插件' where `plugin_id` = 1; update `my_plugin` set `module_name` = 'view-bubblemap-backend' where `plugin_id` = 2; + +DROP TRIGGER `new_auth_panel`; +DROP TRIGGER `new_auth_dataset_group`; +DROP TRIGGER `new_auth_dataset_table`; +DROP TRIGGER `new_auth_link`;