This is an automated email from the ASF dual-hosted git repository.
SbloodyS pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 17ce56905b [Improvement-17933][api] Restrict audit logs for non-admin
users (#18368)
17ce56905b is described below
commit 17ce56905b3f7760636dc4b7f1a719c9abb137c7
Author: Yanjun Qiu <[email protected]>
AuthorDate: Wed Jul 1 10:04:33 2026 +0800
[Improvement-17933][api] Restrict audit logs for non-admin users (#18368)
---
.../api/controller/AuditLogController.java | 1 +
.../dolphinscheduler/api/service/AuditService.java | 5 ++-
.../api/service/impl/AuditServiceImpl.java | 9 +++--
.../api/service/AuditServiceTest.java | 38 +++++++++++++++++++++-
.../dao/mapper/AuditLogMapper.java | 1 +
.../dolphinscheduler/dao/mapper/AuditLogMapper.xml | 3 ++
.../dao/mapper/AuditLogMapperTest.java | 10 +++++-
7 files changed, 62 insertions(+), 5 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
index afa418ebb6..a090453e2a 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
@@ -93,6 +93,7 @@ public class AuditLogController extends BaseController {
@RequestParam(value = "modelName", required = false) String modelName) {
checkPageParams(pageNo, pageSize);
PageInfo<AuditDto> auditDtoPageInfo = auditService.queryLogListPaging(
+ loginUser,
modelTypes,
operationTypes,
startDate,
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
index 8fb99eaf73..8f929fb8ee 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
@@ -20,6 +20,7 @@ package org.apache.dolphinscheduler.api.service;
import org.apache.dolphinscheduler.api.dto.AuditDto;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.dao.entity.AuditLog;
+import org.apache.dolphinscheduler.dao.entity.User;
/**
* audit information service
@@ -36,6 +37,7 @@ public interface AuditService {
/**
* query audit log list
*
+ * @param loginUser login user
* @param modelTypes model types
* @param modelName model name
* @param operationTypes operation types
@@ -46,7 +48,8 @@ public interface AuditService {
* @param pageSize page size
* @return audit log string
*/
- PageInfo<AuditDto> queryLogListPaging(String modelTypes,
+ PageInfo<AuditDto> queryLogListPaging(User loginUser,
+ String modelTypes,
String operationTypes, String
startTime,
String endTime, String userName,
String modelName,
Integer pageNo, Integer pageSize);
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
index c51f2e2de6..e9abd50b48 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
@@ -22,7 +22,9 @@ import org.apache.dolphinscheduler.api.service.AuditService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.common.enums.AuditModelType;
import org.apache.dolphinscheduler.common.enums.AuditOperationType;
+import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.dao.entity.AuditLog;
+import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
import java.util.ArrayList;
@@ -59,6 +61,7 @@ public class AuditServiceImpl extends BaseServiceImpl
implements AuditService {
/**
* query audit log paging
*
+ * @param loginUser login user
* @param modelTypes object types
* @param operationTypes operation types
* @param startDate start time
@@ -70,7 +73,8 @@ public class AuditServiceImpl extends BaseServiceImpl
implements AuditService {
* @return audit log string data
*/
@Override
- public PageInfo<AuditDto> queryLogListPaging(String modelTypes,
+ public PageInfo<AuditDto> queryLogListPaging(User loginUser,
+ String modelTypes,
String operationTypes,
String startDate,
String endDate,
@@ -83,10 +87,11 @@ public class AuditServiceImpl extends BaseServiceImpl
implements AuditService {
Date start = checkAndParseDateParameters(startDate);
Date end = checkAndParseDateParameters(endDate);
+ Integer userId = loginUser.getUserType() == UserType.ADMIN_USER ? null
: loginUser.getId();
IPage<AuditLog> logIPage =
auditLogMapper.queryAuditLog(new Page<>(pageNo, pageSize),
objectTypeCodeList, operationTypeCodeList,
- userName, modelName, start, end);
+ userId, userName, modelName, start, end);
List<AuditDto> auditDtos =
logIPage.getRecords().stream().map(this::transformAuditLog).collect(Collectors.toList());
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
index 463ebaf1aa..50e55f132f 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
@@ -18,13 +18,16 @@
package org.apache.dolphinscheduler.api.service;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.apache.dolphinscheduler.api.service.impl.AuditServiceImpl;
import org.apache.dolphinscheduler.common.enums.AuditModelType;
import org.apache.dolphinscheduler.common.enums.AuditOperationType;
+import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.DateUtils;
import org.apache.dolphinscheduler.dao.entity.AuditLog;
+import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
import java.util.ArrayList;
@@ -59,11 +62,13 @@ public class AuditServiceTest {
IPage<AuditLog> page = new Page<>(1, 10);
page.setRecords(getLists());
page.setTotal(1L);
- when(auditLogMapper.queryAuditLog(Mockito.any(Page.class),
Mockito.any(), Mockito.any(), Mockito.eq(""),
+ when(auditLogMapper.queryAuditLog(Mockito.any(Page.class),
Mockito.any(), Mockito.any(), Mockito.isNull(),
+ Mockito.eq(""),
Mockito.eq(""),
eq(start), eq(end))).thenReturn(page);
Assertions.assertDoesNotThrow(() -> {
auditService.queryLogListPaging(
+ getUser(1, "admin", UserType.ADMIN_USER),
"",
"",
"2020-11-01 00:00:00",
@@ -75,6 +80,29 @@ public class AuditServiceTest {
});
}
+ @Test
+ public void testQueryLogListPagingRestrictsGeneralUserToOwnAuditLogs() {
+ IPage<AuditLog> page = new Page<>(1, 10);
+ page.setRecords(getLists());
+ page.setTotal(1L);
+ when(auditLogMapper.queryAuditLog(Mockito.any(Page.class),
Mockito.any(), Mockito.any(), Mockito.eq(10),
+ Mockito.eq("otherUser"), Mockito.eq(""), Mockito.isNull(),
Mockito.isNull())).thenReturn(page);
+
+ auditService.queryLogListPaging(
+ getUser(10, "generalUser", UserType.GENERAL_USER),
+ "",
+ "",
+ null,
+ null,
+ "otherUser",
+ "",
+ 1,
+ 10);
+
+ verify(auditLogMapper).queryAuditLog(Mockito.any(Page.class),
Mockito.any(), Mockito.any(), Mockito.eq(10),
+ Mockito.eq("otherUser"), Mockito.eq(""), Mockito.isNull(),
Mockito.isNull());
+ }
+
private List<AuditLog> getLists() {
List<AuditLog> list = new ArrayList<>();
list.add(getAuditLog());
@@ -88,4 +116,12 @@ public class AuditServiceTest {
auditLog.setModelType(AuditModelType.PROJECT.getName());
return auditLog;
}
+
+ private User getUser(Integer id, String userName, UserType userType) {
+ User user = new User();
+ user.setId(id);
+ user.setUserName(userName);
+ user.setUserType(userType);
+ return user;
+ }
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
index 3cc95a76d1..243313f75d 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
@@ -35,6 +35,7 @@ public interface AuditLogMapper extends BaseMapper<AuditLog> {
IPage<AuditLog> queryAuditLog(IPage<AuditLog> page,
@Param("modelTypeList") List<String>
modelTypeList,
@Param("operationTypeList") List<String>
operationTypeList,
+ @Param("userId") Integer userId,
@Param("userName") String userName,
@Param("modelName") String modelName,
@Param("startDate") Date startDate,
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
index 63adb57c34..0c08bc467d 100644
---
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
@@ -50,6 +50,9 @@
#{operation_type}
</foreach>
</if>
+ <if test="userId != null">
+ and log.user_id = #{userId}
+ </if>
<if test="userName != null and userName != ''">
and u.user_name like concat ('%', #{userName}, '%')
</if>
diff --git
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
index 92418193b8..8bca8b1f34 100644
---
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
+++
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
@@ -80,7 +80,15 @@ public class AuditLogMapperTest extends BaseDaoTest {
List<String> operationTypeList =
Lists.newArrayList(AuditOperationType.CREATE.getName());
IPage<AuditLog> logIPage =
- logMapper.queryAuditLog(page, objectTypeList,
operationTypeList, "", "", null, null);
+ logMapper.queryAuditLog(page, objectTypeList,
operationTypeList, null, "", "", null, null);
Assertions.assertNotEquals(0, logIPage.getTotal());
+
+ IPage<AuditLog> userLogPage =
+ logMapper.queryAuditLog(new Page<>(1, 3), objectTypeList,
operationTypeList, 1, "", "", null, null);
+ Assertions.assertNotEquals(0, userLogPage.getTotal());
+
+ IPage<AuditLog> otherUserLogPage =
+ logMapper.queryAuditLog(new Page<>(1, 3), objectTypeList,
operationTypeList, 2, "", "", null, null);
+ Assertions.assertEquals(0, otherUserLogPage.getTotal());
}
}