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 d4e1498c41 [Improvement-18589][API] Align cluster query permissions 
(#18590)
d4e1498c41 is described below

commit d4e1498c4126f77032a1e6c8c413bf715731c2ca
Author: Wenjun Ruan <[email protected]>
AuthorDate: Wed Aug 26 16:18:36 2026 +0800

    [Improvement-18589][API] Align cluster query permissions (#18590)
    
    Co-authored-by: xiangzihao <[email protected]>
---
 .../api/controller/ClusterController.java          |  9 +++----
 .../api/service/ClusterService.java                | 14 +++++++----
 .../api/service/impl/ClusterServiceImpl.java       | 28 ++++++++++++++++++----
 .../api/service/impl/ClusterServiceTest.java       | 28 +++++++++++++++++-----
 4 files changed, 59 insertions(+), 20 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ClusterController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ClusterController.java
index d1236bc736..a47eaba885 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ClusterController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ClusterController.java
@@ -136,7 +136,7 @@ public class ClusterController extends BaseController {
     public Result<ClusterDto> queryClusterByCode(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                                  @RequestParam("clusterCode") 
Long clusterCode) {
 
-        ClusterDto clusterDto = clusterService.queryClusterByCode(clusterCode);
+        ClusterDto clusterDto = clusterService.queryClusterByCode(loginUser, 
clusterCode);
         return Result.success(clusterDto);
     }
 
@@ -164,7 +164,8 @@ public class ClusterController extends BaseController {
 
         checkPageParams(pageNo, pageSize);
         searchVal = ParameterUtils.handleEscapes(searchVal);
-        PageInfo<ClusterDto> clusterDtoPageInfo = 
clusterService.queryClusterListPaging(pageNo, pageSize, searchVal);
+        PageInfo<ClusterDto> clusterDtoPageInfo = 
clusterService.queryClusterListPaging(loginUser, pageNo, pageSize,
+                searchVal);
         return Result.success(clusterDtoPageInfo);
     }
 
@@ -201,7 +202,7 @@ public class ClusterController extends BaseController {
     @ResponseStatus(HttpStatus.OK)
     @ApiException(QUERY_CLUSTER_ERROR)
     public Result<List<ClusterDto>> queryAllClusterList(@Parameter(hidden = 
true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
-        List<ClusterDto> clusterDtos = clusterService.queryAllClusterList();
+        List<ClusterDto> clusterDtos = 
clusterService.queryAllClusterList(loginUser);
         return Result.success(clusterDtos);
     }
 
@@ -221,7 +222,7 @@ public class ClusterController extends BaseController {
     @ApiException(VERIFY_CLUSTER_ERROR)
     public Result<Boolean> verifyCluster(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                          @RequestParam(value = "clusterName") 
String clusterName) {
-        clusterService.verifyCluster(clusterName);
+        clusterService.verifyCluster(loginUser, clusterName);
         return Result.success(true);
     }
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ClusterService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ClusterService.java
index d8a04df4e8..d4c4c1d174 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ClusterService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ClusterService.java
@@ -47,9 +47,10 @@ public interface ClusterService {
     /**
      * query cluster
      *
-     * @param code cluster code
+     * @param loginUser login user
+     * @param code      cluster code
      */
-    ClusterDto queryClusterByCode(Long code);
+    ClusterDto queryClusterByCode(User loginUser, Long code);
 
     /**
      * delete cluster
@@ -73,26 +74,29 @@ public interface ClusterService {
     /**
      * query cluster paging
      *
+     * @param loginUser login user
      * @param pageNo    page number
      * @param searchVal search value
      * @param pageSize  page size
      * @return cluster list page
      */
-    PageInfo<ClusterDto> queryClusterListPaging(Integer pageNo, Integer 
pageSize, String searchVal);
+    PageInfo<ClusterDto> queryClusterListPaging(User loginUser, Integer 
pageNo, Integer pageSize, String searchVal);
 
     /**
      * query all cluster
      *
+     * @param loginUser login user
      * @return all cluster list
      */
-    List<ClusterDto> queryAllClusterList();
+    List<ClusterDto> queryAllClusterList(User loginUser);
 
     /**
      * verify cluster name
      *
+     * @param loginUser   login user
      * @param clusterName cluster name
      * @return true if the cluster name not exists, otherwise return false
      */
-    void verifyCluster(String clusterName);
+    void verifyCluster(User loginUser, String clusterName);
 
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
index b764729d9a..b7e45b53ac 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceImpl.java
@@ -106,13 +106,18 @@ public class ClusterServiceImpl extends BaseServiceImpl 
implements ClusterServic
     /**
      * query cluster paging
      *
+     * @param loginUser login user
      * @param pageNo    page number
      * @param searchVal search value
      * @param pageSize  page size
      * @return cluster list page
      */
     @Override
-    public PageInfo<ClusterDto> queryClusterListPaging(Integer pageNo, Integer 
pageSize, String searchVal) {
+    public PageInfo<ClusterDto> queryClusterListPaging(User loginUser, Integer 
pageNo, Integer pageSize,
+                                                       String searchVal) {
+        if (isNotAdmin(loginUser)) {
+            throw new ServiceException(Status.USER_NO_OPERATION_PERM);
+        }
 
         Page<Cluster> page = new Page<>(pageNo, pageSize);
 
@@ -136,10 +141,15 @@ public class ClusterServiceImpl extends BaseServiceImpl 
implements ClusterServic
     /**
      * query all cluster
      *
+     * @param loginUser login user
      * @return all cluster list
      */
     @Override
-    public List<ClusterDto> queryAllClusterList() {
+    public List<ClusterDto> queryAllClusterList(User loginUser) {
+        if (isNotAdmin(loginUser)) {
+            throw new ServiceException(Status.USER_NO_OPERATION_PERM);
+        }
+
         List<Cluster> clusterList = clusterDao.queryAllClusterList();
         if (CollectionUtils.isEmpty(clusterList)) {
             return Collections.emptyList();
@@ -157,10 +167,14 @@ public class ClusterServiceImpl extends BaseServiceImpl 
implements ClusterServic
     /**
      * query cluster
      *
-     * @param code cluster code
+     * @param loginUser login user
+     * @param code      cluster code
      */
     @Override
-    public ClusterDto queryClusterByCode(Long code) {
+    public ClusterDto queryClusterByCode(User loginUser, Long code) {
+        if (isNotAdmin(loginUser)) {
+            throw new ServiceException(Status.USER_NO_OPERATION_PERM);
+        }
 
         Cluster cluster = clusterDao.queryByClusterCode(code);
 
@@ -270,11 +284,15 @@ public class ClusterServiceImpl extends BaseServiceImpl 
implements ClusterServic
     /**
      * verify cluster name
      *
+     * @param loginUser   login user
      * @param clusterName cluster name
      * @return true if the cluster name not exists, otherwise return false
      */
     @Override
-    public void verifyCluster(String clusterName) {
+    public void verifyCluster(User loginUser, String clusterName) {
+        if (isNotAdmin(loginUser)) {
+            throw new ServiceException(Status.USER_NO_OPERATION_PERM);
+        }
 
         if (StringUtils.isEmpty(clusterName)) {
             throw new ServiceException(Status.CLUSTER_NAME_IS_NULL);
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceTest.java
index 68c0dc8b0e..381ec66205 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/ClusterServiceTest.java
@@ -141,19 +141,26 @@ public class ClusterServiceTest {
 
     @Test
     public void testQueryAllClusterList() {
+        assertThrowsServiceException(Status.USER_NO_OPERATION_PERM,
+                () -> clusterService.queryAllClusterList(getGeneralUser()));
+
         
when(clusterDao.queryAllClusterList()).thenReturn(Lists.newArrayList(getCluster()));
-        List<ClusterDto> clusterDtos = clusterService.queryAllClusterList();
+        List<ClusterDto> clusterDtos = 
clusterService.queryAllClusterList(getAdminUser());
         Assertions.assertEquals(clusterDtos.size(), 1);
     }
 
     @Test
     public void testQueryClusterListPaging() {
+        assertThrowsServiceException(Status.USER_NO_OPERATION_PERM,
+                () -> clusterService.queryClusterListPaging(getGeneralUser(), 
1, 10, clusterName));
+
         IPage<Cluster> page = new Page<>(1, 10);
         page.setRecords(getList());
         page.setTotal(1L);
         when(clusterDao.queryClusterListPaging(Mockito.any(Page.class), 
Mockito.eq(clusterName))).thenReturn(page);
 
-        PageInfo<ClusterDto> clusterDtoPageInfo = 
clusterService.queryClusterListPaging(1, 10, clusterName);
+        PageInfo<ClusterDto> clusterDtoPageInfo = 
clusterService.queryClusterListPaging(getAdminUser(), 1, 10,
+                clusterName);
         
Assertions.assertTrue(CollectionUtils.isNotEmpty(clusterDtoPageInfo.getTotalList()));
     }
 
@@ -170,11 +177,15 @@ public class ClusterServiceTest {
 
     @Test
     public void testQueryClusterByCode() {
+        assertThrowsServiceException(Status.USER_NO_OPERATION_PERM,
+                () -> clusterService.queryClusterByCode(getGeneralUser(), 1L));
+
         when(clusterDao.queryByClusterCode(1L)).thenReturn(null);
-        assertThrowsServiceException(Status.QUERY_CLUSTER_BY_CODE_ERROR, () -> 
clusterService.queryClusterByCode(1L));
+        assertThrowsServiceException(Status.QUERY_CLUSTER_BY_CODE_ERROR,
+                () -> clusterService.queryClusterByCode(getAdminUser(), 1L));
 
         when(clusterDao.queryByClusterCode(1L)).thenReturn(getCluster());
-        ClusterDto clusterDto = clusterService.queryClusterByCode(1L);
+        ClusterDto clusterDto = 
clusterService.queryClusterByCode(getAdminUser(), 1L);
         assertNotNull(clusterDto);
     }
 
@@ -196,10 +207,15 @@ public class ClusterServiceTest {
 
     @Test
     public void testVerifyCluster() {
-        assertThrowsServiceException(Status.CLUSTER_NAME_IS_NULL, () -> 
clusterService.verifyCluster(""));
+        assertThrowsServiceException(Status.USER_NO_OPERATION_PERM,
+                () -> clusterService.verifyCluster(getGeneralUser(), 
clusterName));
+
+        assertThrowsServiceException(Status.CLUSTER_NAME_IS_NULL,
+                () -> clusterService.verifyCluster(getAdminUser(), ""));
 
         
when(clusterDao.queryByClusterName(clusterName)).thenReturn(getCluster());
-        assertThrowsServiceException(Status.CLUSTER_NAME_EXISTS, () -> 
clusterService.verifyCluster(clusterName));
+        assertThrowsServiceException(Status.CLUSTER_NAME_EXISTS,
+                () -> clusterService.verifyCluster(getAdminUser(), 
clusterName));
     }
 
     private Cluster getCluster() {

Reply via email to