diff --git a/.typos.toml b/.typos.toml index d1b2530178..fdba0e4ce6 100644 --- a/.typos.toml +++ b/.typos.toml @@ -2,5 +2,6 @@ ser = "ser" Referer = "Referer" Encryp = "Encryp" +OT = "OT" [files] extend-exclude = ["mapFiles/**"] diff --git a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java index de5c71fe4a..48bb4628f5 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java @@ -7,7 +7,10 @@ import io.dataease.api.dataset.dto.SqlVariableDetails; import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.dataset.vo.DataSetBarVO; import io.dataease.commons.constants.OptConstants; +import io.dataease.constant.LogOT; +import io.dataease.constant.LogST; import io.dataease.dataset.manage.DatasetGroupManage; +import io.dataease.log.DeLog; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; import jakarta.annotation.Resource; @@ -23,16 +26,19 @@ public class DatasetTreeServer implements DatasetTreeApi { private DatasetGroupManage datasetGroupManage; + @DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET) @Override public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetNodeDTO) throws Exception { return datasetGroupManage.save(datasetNodeDTO, false); } + @DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET) @Override public DatasetNodeDTO rename(DatasetGroupInfoDTO dto) throws Exception { return datasetGroupManage.save(dto, true); } + @DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.CREATE, st = LogST.DATASET) @Override public DatasetNodeDTO create(DatasetGroupInfoDTO dto) throws Exception { return datasetGroupManage.save(dto, false); diff --git a/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java b/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java index e16ac95ec1..b5434e11c9 100644 --- a/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java +++ b/core/core-backend/src/main/java/io/dataease/menu/manage/MenuManage.java @@ -97,6 +97,7 @@ public class MenuManage { || coreMenu.getPid().equals(21L) || coreMenu.getId().equals(25L) || coreMenu.getId().equals(26L) - || coreMenu.getId().equals(35L); + || coreMenu.getId().equals(35L) + || coreMenu.getId().equals(40L); } } diff --git a/core/core-backend/src/main/resources/application-standalone.yml b/core/core-backend/src/main/resources/application-standalone.yml index a179fd34d0..b521aa59d0 100644 --- a/core/core-backend/src/main/resources/application-standalone.yml +++ b/core/core-backend/src/main/resources/application-standalone.yml @@ -4,7 +4,7 @@ spring: username: root password: 123456 messages: - basename: i18n/lic,i18n/core,i18n/permissions + basename: i18n/lic,i18n/core,i18n/permissions,i18n/xpack flyway: enabled: true table: de_standalone_version diff --git a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties index 0d1fe827f8..d2f6d4d8c5 100644 --- a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties +++ b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties @@ -61,3 +61,4 @@ i18n_table_name_repeat=\u540D\u79F0\u91CD\u590D: i18n_sql_not_empty=sql \u4E0D\u80FD\u4E3A\u7A7A i18n_menu.parameter=\u7CFB\u7EDF\u53C2\u6570 i18n_user_old_pwd_error=\u539F\u59CB\u5BC6\u7801\u9519\u8BEF +i18n_menu.toolbox-log=\u64CD\u4F5C\u65E5\u5FD7 diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/log/LogApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/log/LogApi.java new file mode 100644 index 0000000000..ee6e92907c --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/log/LogApi.java @@ -0,0 +1,40 @@ +package io.dataease.api.log; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.api.log.dto.LogGridRequest; +import io.dataease.api.log.vo.LogGridVO; +import io.dataease.api.log.vo.LogOpVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@Tag(name = "工具箱:日志管理") +@ApiSupport(order = 2) +public interface LogApi { + + @Operation(summary = "查询日志列表") + @Parameters({ + @Parameter(name = "goPage", description = "目标页码", required = true, in = ParameterIn.PATH), + @Parameter(name = "pageSize", description = "每页容量", required = true, in = ParameterIn.PATH), + @Parameter(name = "request", description = "过滤条件", required = true) + }) + @PostMapping("/pager/{goPage}/{pageSize}") + IPage pager(@PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize, @RequestBody LogGridRequest request); + + @Operation(summary = "导出日志列表") + @PostMapping("/export") + void export(@RequestBody LogGridRequest request); + + @Operation(summary = "操作类型") + @GetMapping("/options") + List logOptions(); +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/log/dto/LogGridRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/log/dto/LogGridRequest.java new file mode 100644 index 0000000000..9035722cb5 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/log/dto/LogGridRequest.java @@ -0,0 +1,21 @@ +package io.dataease.api.log.dto; + +import io.dataease.model.KeywordRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LogGridRequest extends KeywordRequest implements Serializable { + + private String op; + + private Long uid; + + private Long oid; + + private List time; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogGridVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogGridVO.java new file mode 100644 index 0000000000..bb2665af0f --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogGridVO.java @@ -0,0 +1,19 @@ +package io.dataease.api.log.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class LogGridVO implements Serializable { + + private String opText; + + private String opDetail; + + private String name; + + private String ip; + + private Long time; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogOpVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogOpVO.java new file mode 100644 index 0000000000..c688d28196 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/log/vo/LogOpVO.java @@ -0,0 +1,20 @@ +package io.dataease.api.log.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LogOpVO implements Serializable { + + private String value; + + private String label; + + private List children; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/api/InteractiveAuthApi.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/api/InteractiveAuthApi.java index 2e3c1d33bf..396be3149e 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/api/InteractiveAuthApi.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/api/InteractiveAuthApi.java @@ -7,6 +7,7 @@ import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO; import io.dataease.api.permissions.auth.dto.BusiResourceCreator; import io.dataease.api.permissions.auth.dto.BusiResourceEditor; import io.dataease.api.permissions.auth.dto.BusiResourceMover; +import io.dataease.api.permissions.auth.vo.ResourceNodeVO; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; import io.swagger.v3.oas.annotations.Hidden; @@ -71,4 +72,7 @@ public interface InteractiveAuthApi { @PostMapping("/checkAuth") void checkAuth(@RequestBody BusiPerCheckDTO checkDTO); + @GetMapping("/query2Root/{id}/{flag}") + List query2Root(@PathVariable("id") Long id, @PathVariable("flag") Integer flag); + } diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/vo/ResourceNodeVO.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/vo/ResourceNodeVO.java new file mode 100644 index 0000000000..7920b38be4 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/vo/ResourceNodeVO.java @@ -0,0 +1,13 @@ +package io.dataease.api.permissions.auth.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ResourceNodeVO implements Serializable { + + private Long id; + + private String name; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/api/OrgApi.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/api/OrgApi.java index d12264f4e5..7f8ec71fe4 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/api/OrgApi.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/api/OrgApi.java @@ -5,6 +5,7 @@ import io.dataease.api.permissions.org.dto.OrgCreator; import io.dataease.api.permissions.org.dto.OrgEditor; import io.dataease.api.permissions.org.dto.OrgRequest; import io.dataease.api.permissions.org.vo.MountedVO; +import io.dataease.api.permissions.org.vo.OrgDetailVO; import io.dataease.api.permissions.org.vo.OrgPageVO; import io.dataease.auth.DeApiPath; import io.dataease.auth.DePermit; @@ -56,4 +57,8 @@ public interface OrgApi { @Operation(summary = "", hidden = true) @GetMapping("/resourceExist/{oid}") boolean resourceExist(@PathVariable("oid") Long oid); + + @Operation(hidden = true) + @GetMapping("/detail/{oid}") + OrgDetailVO detail(@PathVariable("oid") Long oid); } diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/vo/OrgDetailVO.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/vo/OrgDetailVO.java new file mode 100644 index 0000000000..bdf8c1c409 --- /dev/null +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/org/vo/OrgDetailVO.java @@ -0,0 +1,20 @@ +package io.dataease.api.permissions.org.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OrgDetailVO { + + private Long id; + + private String name; + + private Long pid; + + private String rootPath; + +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/role/dto/RoleCreator.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/role/dto/RoleCreator.java index a348c82a6a..a9add0facd 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/role/dto/RoleCreator.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/role/dto/RoleCreator.java @@ -1,5 +1,6 @@ package io.dataease.api.permissions.role.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -17,6 +18,9 @@ public class RoleCreator implements Serializable { private Integer typeCode; @Schema(description = "描述", hidden = true) private String desc; + @JsonIgnore + @Schema(hidden = true) + private Long rid; } diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/dto/UserCreator.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/dto/UserCreator.java index 7535d3c82c..e97d13e952 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/dto/UserCreator.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/dto/UserCreator.java @@ -1,5 +1,6 @@ package io.dataease.api.permissions.user.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -27,4 +28,7 @@ public class UserCreator implements Serializable { private List roleIds; @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED) private Boolean enable; + @Schema(hidden = true) + @JsonIgnore + private Long uid; } diff --git a/sdk/common/src/main/java/io/dataease/constant/LogOT.java b/sdk/common/src/main/java/io/dataease/constant/LogOT.java new file mode 100644 index 0000000000..512da3434c --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/LogOT.java @@ -0,0 +1,39 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum LogOT { + CREATE(1, "OPERATE_TYPE_CREATE"), + MODIFY(2, "OPERATE_TYPE_MODIFY"), + DELETE(3, "OPERATE_TYPE_DELETE"), + READ(4, "OPERATE_TYPE_READ"), + EXPORT(5, "OPERATE_TYPE_EXPORT"), + AUTHORIZE(6, "OPERATE_TYPE_AUTHORIZE"), + UNAUTHORIZE(7, "OPERATE_TYPE_UNAUTHORIZE"), + CREATELINK(8, "OPERATE_TYPE_CREATELINK"), + DELETELINK(9, "OPERATE_TYPE_DELETELINK"), + MODIFYLINK(10, "OPERATE_TYPE_MODIFYLINK"), + UPLOADFILE(11, "OPERATE_TYPE_UPLOADFILE"), + BIND(12, "OPERATE_TYPE_BIND"), + UNBIND(13, "OPERATE_TYPE_UNBIND"), + LOGIN(14, "OPERATE_TYPE_LOGIN"); + private Integer value; + private String name; + + LogOT(Integer value, String name) { + this.value = value; + this.name = name; + } + + public static LogOT fromValue(Integer value) { + return Arrays.stream(values()).filter(v -> v.value.equals(value)).findFirst().get(); + } + + public Integer getValue() { + return value; + } + + public String getName() { + return name; + } +} diff --git a/sdk/common/src/main/java/io/dataease/constant/LogST.java b/sdk/common/src/main/java/io/dataease/constant/LogST.java new file mode 100644 index 0000000000..4a938bdfab --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/LogST.java @@ -0,0 +1,42 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum LogST { + PANEL(1, "SOURCE_TYPE_PANEL"), + SCREEN(2, "SOURCE_TYPE_SCREEN"), + DATASET(3, "SOURCE_TYPE_DATASET"), + DATASOURCE(4, "SOURCE_TYPE_DATASOURCE"), + USER(5, "SOURCE_TYPE_USER"), + ROLE(6, "SOURCE_TYPE_ROLE"), + ORG(7, "SOURCE_TYPE_DEPT"), + VIEW(8, "SOURCE_TYPE_VIEW"), + LINK(9, "SOURCE_TYPE_LINK"), + DRIVER(10, "SOURCE_TYPE_DRIVER"), + DRIVER_FILE(11, "SOURCE_TYPE_DRIVER_FILE"), + MENU(12, "SOURCE_TYPE_MENU"), + APIKEY(13, "SOURCE_TYPE_APIKEY"); + private Integer value; + + private String name; + + public Integer getValue() { + return value; + } + + public String getName() { + return name; + } + + LogST(Integer value, String name) { + this.value = value; + this.name = name; + } + + public static LogST fromValue(Integer value) { + return Arrays.stream(values()).filter(v -> v.value.equals(value)).findFirst().get(); + } + + LogST() { + } +} diff --git a/sdk/common/src/main/java/io/dataease/log/DeLog.java b/sdk/common/src/main/java/io/dataease/log/DeLog.java new file mode 100644 index 0000000000..3194dc42a3 --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/log/DeLog.java @@ -0,0 +1,19 @@ +package io.dataease.log; + +import io.dataease.constant.LogOT; +import io.dataease.constant.LogST; + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DeLog { + String id() default ""; + + String pid() default ""; + + LogST st(); + + LogOT ot(); +} diff --git a/sdk/common/src/main/java/io/dataease/model/LogItemModel.java b/sdk/common/src/main/java/io/dataease/model/LogItemModel.java new file mode 100644 index 0000000000..062a404490 --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/model/LogItemModel.java @@ -0,0 +1,16 @@ +package io.dataease.model; + +import io.dataease.constant.LogST; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class LogItemModel implements Serializable { + + private Long id; + + private String name; + + private LogST st; +} diff --git a/sdk/common/src/main/java/io/dataease/utils/CommonBeanFactory.java b/sdk/common/src/main/java/io/dataease/utils/CommonBeanFactory.java index 2198cdfac7..52cbd8588c 100644 --- a/sdk/common/src/main/java/io/dataease/utils/CommonBeanFactory.java +++ b/sdk/common/src/main/java/io/dataease/utils/CommonBeanFactory.java @@ -35,4 +35,12 @@ public class CommonBeanFactory implements ApplicationContextAware { public static ApplicationContext getApplicationContext() { return context; } + + public static T proxy(Class className) { + try { + return context != null && className != null ? context.getBean(className) : null; + } catch (BeansException e) { + return null; + } + } }