This is an automated email from the ASF dual-hosted git repository.

leonbao pushed a commit to branch 1.3.2-release
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/1.3.2-release by this push:
     new 553af77   add login user check some actions in api
     new 0a0515e  Merge remote-tracking branch 'upstream/1.3.2-release' into 
132-checkadmin
553af77 is described below

commit 553af77803a5fdb787c3a0b94ac61ab8f4213b3c
Author: lenboo <[email protected]>
AuthorDate: Sat Aug 15 08:31:02 2020 +0800

     add login user check some actions in api
---
 .../api/controller/AccessTokenController.java      |  6 ++---
 .../api/controller/UsersController.java            |  2 +-
 .../api/service/AccessTokenService.java            | 25 +++++++++++++++++---
 .../dolphinscheduler/api/service/BaseService.java  | 19 +++++++++++++++
 .../dolphinscheduler/api/service/UsersService.java | 27 +++++-----------------
 .../api/service/AccessTokenServiceTest.java        | 16 +++++++++----
 .../api/service/UsersServiceTest.java              | 11 ++++++---
 7 files changed, 71 insertions(+), 35 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AccessTokenController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AccessTokenController.java
index 8731b26..a9782ab 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AccessTokenController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AccessTokenController.java
@@ -74,7 +74,7 @@ public class AccessTokenController extends BaseController {
         logger.info("login user {}, create token , userId : {} , token expire 
time : {} , token : {}", loginUser.getUserName(),
                 userId, expireTime, token);
 
-        Map<String, Object> result = accessTokenService.createToken(userId, 
expireTime, token);
+        Map<String, Object> result = accessTokenService.createToken(loginUser, 
userId, expireTime, token);
         return returnDataList(result);
     }
 
@@ -94,7 +94,7 @@ public class AccessTokenController extends BaseController {
                                 @RequestParam(value = "userId") int userId,
                                 @RequestParam(value = "expireTime") String 
expireTime) {
         logger.info("login user {}, generate token , userId : {} , token 
expire time : {}", loginUser, userId, expireTime);
-        Map<String, Object> result = accessTokenService.generateToken(userId, 
expireTime);
+        Map<String, Object> result = 
accessTokenService.generateToken(loginUser, userId, expireTime);
         return returnDataList(result);
     }
 
@@ -173,7 +173,7 @@ public class AccessTokenController extends BaseController {
         logger.info("login user {}, update token , userId : {} , token expire 
time : {} , token : {}", loginUser.getUserName(),
                 userId, expireTime, token);
 
-        Map<String, Object> result = accessTokenService.updateToken(id, 
userId, expireTime, token);
+        Map<String, Object> result = accessTokenService.updateToken(loginUser, 
id, userId, expireTime, token);
         return returnDataList(result);
     }
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
index 08d862e..fb237e6 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
@@ -161,7 +161,7 @@ public class UsersController extends BaseController {
                              @RequestParam(value = "phone", required = false) 
String phone) throws Exception {
         logger.info("login user {}, updateProcessInstance user, userName: {}, 
email: {}, tenantId: {}, userPassword: {}, phone: {}, user queue: {}",
                 loginUser.getUserName(), userName, email, tenantId, 
Constants.PASSWORD_DEFAULT, phone, queue);
-        Map<String, Object> result = usersService.updateUser(id, userName, 
userPassword, email, tenantId, phone, queue);
+        Map<String, Object> result = usersService.updateUser(loginUser, id, 
userName, userPassword, email, tenantId, phone, queue);
         return returnDataList(result);
     }
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AccessTokenService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AccessTokenService.java
index 5d17696..8b40a25 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AccessTokenService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AccessTokenService.java
@@ -75,13 +75,18 @@ public class AccessTokenService extends BaseService {
 
     /**
      * create token
+     *
+     * @param loginUser
      * @param userId token for user
      * @param expireTime token expire time
      * @param token token string
      * @return create result code
      */
-    public Map<String, Object> createToken(int userId, String expireTime, 
String token) {
+    public Map<String, Object> createToken(User loginUser, int userId, String 
expireTime, String token) {
         Map<String, Object> result = new HashMap<>(5);
+        if(check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)){
+            return result;
+        }
 
         if (userId <= 0) {
             throw new IllegalArgumentException("User id should not less than 
or equals to 0.");
@@ -107,12 +112,17 @@ public class AccessTokenService extends BaseService {
 
     /**
      * generate token
+     *
+     * @param loginUser
      * @param userId token for user
      * @param expireTime token expire time
      * @return token string
      */
-    public Map<String, Object> generateToken(int userId, String expireTime) {
+    public Map<String, Object> generateToken(User loginUser, int userId, 
String expireTime) {
         Map<String, Object> result = new HashMap<>(5);
+        if(check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)){
+            return result;
+        }
         String token = EncryptionUtils.getMd5(userId + expireTime + 
String.valueOf(System.currentTimeMillis()));
         result.put(Constants.DATA_LIST, token);
         putMsg(result, Status.SUCCESS);
@@ -128,6 +138,10 @@ public class AccessTokenService extends BaseService {
     public Map<String, Object> delAccessTokenById(User loginUser, int id) {
         Map<String, Object> result = new HashMap<>(5);
 
+        if(check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)){
+            return result;
+        }
+
         AccessToken accessToken = accessTokenMapper.selectById(id);
 
         if (accessToken == null) {
@@ -149,15 +163,20 @@ public class AccessTokenService extends BaseService {
 
     /**
      * update token by id
+     *
+     * @param loginUser
      * @param id token id
      * @param userId token for user
      * @param expireTime token expire time
      * @param token token string
      * @return update result code
      */
-    public Map<String, Object> updateToken(int id,int userId, String 
expireTime, String token) {
+    public Map<String, Object> updateToken(User loginUser, int id, int userId, 
String expireTime, String token) {
         Map<String, Object> result = new HashMap<>(5);
 
+        if(check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)){
+            return result;
+        }
         AccessToken accessToken = accessTokenMapper.selectById(id);
         if (accessToken == null) {
             logger.error("access token not exist,  access token id {}", id);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
index 646a67a..e0617f3 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
@@ -95,6 +95,25 @@ public class BaseService {
     }
 
     /**
+     * check
+     *
+     * @param result result
+     * @param bool bool
+     * @param userNoOperationPerm status
+     * @return check result
+     */
+    protected boolean check(Map<String, Object> result, boolean bool, Status 
userNoOperationPerm) {
+        //only admin can operate
+        if (bool) {
+            result.put(Constants.STATUS, userNoOperationPerm);
+            result.put(Constants.MSG, userNoOperationPerm.getMsg());
+            return true;
+        }
+        return false;
+    }
+
+
+    /**
      * get cookie info by name
      * @param request request
      * @param name 'sessionId'
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
index 8d79c8e..1ceb0f7 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
@@ -248,6 +248,8 @@ public class UsersService extends BaseService {
     /**
      * updateProcessInstance user
      *
+     *
+     * @param loginUser
      * @param userId user id
      * @param userName user name
      * @param userPassword user password
@@ -258,7 +260,7 @@ public class UsersService extends BaseService {
      * @return update result code
      * @throws Exception exception
      */
-    public Map<String, Object> updateUser(int userId,
+    public Map<String, Object> updateUser(User loginUser, int userId,
                                           String userName,
                                           String userPassword,
                                           String email,
@@ -268,13 +270,14 @@ public class UsersService extends BaseService {
         Map<String, Object> result = new HashMap<>(5);
         result.put(Constants.STATUS, false);
 
+        if (check(result, !hasPerm(loginUser, userId), 
Status.USER_NO_OPERATION_PERM)) {
+            return result;
+        }
         User user = userMapper.selectById(userId);
-
         if (user == null) {
             putMsg(result, Status.USER_NOT_EXIST, userId);
             return result;
         }
-
         if (StringUtils.isNotEmpty(userName)) {
 
             if (!CheckUtils.checkUserName(userName)){
@@ -815,24 +818,6 @@ public class UsersService extends BaseService {
     }
 
     /**
-     * check
-     *
-     * @param result result
-     * @param bool bool
-     * @param userNoOperationPerm status
-     * @return check result
-     */
-    private boolean check(Map<String, Object> result, boolean bool, Status 
userNoOperationPerm) {
-        //only admin can operate
-        if (bool) {
-            result.put(Constants.STATUS, userNoOperationPerm);
-            result.put(Constants.MSG, userNoOperationPerm.getMsg());
-            return true;
-        }
-        return false;
-    }
-
-    /**
      * @param tenantId tenant id
      * @return true if tenant exists, otherwise return false
      */
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
index f388445..258d441 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AccessTokenServiceTest.java
@@ -94,7 +94,7 @@ public class AccessTokenServiceTest {
 
 
        when(accessTokenMapper.insert(any(AccessToken.class))).thenReturn(2);
-        Map<String, Object> result = 
accessTokenService.createToken(1,getDate(),"AccessTokenServiceTest");
+        Map<String, Object> result = 
accessTokenService.createToken(getLoginUser(), 
1,getDate(),"AccessTokenServiceTest");
         logger.info(result.toString());
         Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
     }
@@ -102,7 +102,7 @@ public class AccessTokenServiceTest {
     @Test
     public  void testGenerateToken(){
 
-        Map<String, Object> result = 
accessTokenService.generateToken(Integer.MAX_VALUE,getDate());
+        Map<String, Object> result = 
accessTokenService.generateToken(getLoginUser(), Integer.MAX_VALUE,getDate());
         logger.info(result.toString());
         Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
         String token = (String) result.get(Constants.DATA_LIST);
@@ -134,16 +134,24 @@ public class AccessTokenServiceTest {
     public  void testUpdateToken(){
 
         when(accessTokenMapper.selectById(1)).thenReturn(getEntity());
-        Map<String, Object> result = 
accessTokenService.updateToken(1,Integer.MAX_VALUE,getDate(),"token");
+        Map<String, Object> result = 
accessTokenService.updateToken(getLoginUser(), 
1,Integer.MAX_VALUE,getDate(),"token");
         logger.info(result.toString());
         Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
         // not exist
-        result = 
accessTokenService.updateToken(2,Integer.MAX_VALUE,getDate(),"token");
+        result = accessTokenService.updateToken(getLoginUser(), 
2,Integer.MAX_VALUE,getDate(),"token");
         logger.info(result.toString());
         
Assert.assertEquals(Status.ACCESS_TOKEN_NOT_EXIST,result.get(Constants.STATUS));
 
     }
 
+
+    private User getLoginUser(){
+        User loginUser = new User();
+        loginUser.setId(1);
+        loginUser.setUserType(UserType.ADMIN_USER);
+        return loginUser;
+    }
+
     /**
      * create entity
      * @return
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
index 58ee6fd..6162860 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
@@ -18,7 +18,6 @@ package org.apache.dolphinscheduler.api.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.avro.generic.GenericData;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
@@ -225,13 +224,13 @@ public class UsersServiceTest {
         String userPassword = "userTest0001";
         try {
             //user not exist
-            Map<String, Object> result = 
usersService.updateUser(0,userName,userPassword,"[email protected]",1,"13457864543","queue");
+            Map<String, Object> result = 
usersService.updateUser(getLoginUser(), 
0,userName,userPassword,"[email protected]",1,"13457864543","queue");
             Assert.assertEquals(Status.USER_NOT_EXIST, 
result.get(Constants.STATUS));
             logger.info(result.toString());
 
             //success
             when(userMapper.selectById(1)).thenReturn(getUser());
-            result = 
usersService.updateUser(1,userName,userPassword,"[email protected]",1,"13457864543","queue");
+            result = usersService.updateUser(getLoginUser(), 
1,userName,userPassword,"[email protected]",1,"13457864543","queue");
             logger.info(result.toString());
             Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
         } catch (Exception e) {
@@ -357,6 +356,12 @@ public class UsersServiceTest {
 
     }
 
+    private User getLoginUser(){
+        User loginUser = new User();
+        loginUser.setId(1);
+        loginUser.setUserType(UserType.ADMIN_USER);
+        return loginUser;
+    }
 
     @Test
     public void getUserInfo(){

Reply via email to