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`;