You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ki...@apache.org on 2022/08/29 12:27:11 UTC

[incubator-seatunnel] branch dev updated: [seatunnel-1947][seatunnel-server] add auth for server (#2510)

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

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 3ba8631f3 [seatunnel-1947][seatunnel-server] add auth for server (#2510)
3ba8631f3 is described below

commit 3ba8631f38fe5a4c962bea34b4fe08f6e22f85a0
Author: luketalent <lu...@qq.com>
AuthorDate: Mon Aug 29 20:27:03 2022 +0800

    [seatunnel-1947][seatunnel-server] add auth for server (#2510)
    
    * [seatunnel-1947][seatunnel-server] add auth for server
    
    Co-authored-by: shiliang.lu <sh...@clickzetta.com>
---
 .../{UserTypeEnum.java => RoleTypeEnum.java}       |  7 +-
 .../apache/seatunnel/app/common/UserTypeEnum.java  |  1 +
 .../seatunnel/app/controller/AuthController.java   | 51 +++++++++++++
 .../UserTypeEnum.java => dal/dao/IRoleDao.java}    | 22 ++----
 .../dao/IRoleUserRelationDao.java}                 | 22 ++----
 .../org/apache/seatunnel/app/dal/dao/IUserDao.java |  2 +
 .../dao/impl/RoleDaoImpl.java}                     | 33 ++++----
 .../app/dal/dao/impl/RoleUserRelationDaoImpl.java  | 50 ++++++++++++
 .../seatunnel/app/dal/dao/impl/UserDaoImpl.java    |  5 ++
 .../UserTypeEnum.java => dal/entity/Role.java}     | 37 +++++----
 .../entity/RoleUserRelation.java}                  | 35 +++++----
 .../mapper/RoleMapper.java}                        | 22 ++----
 .../mapper/RoleUserRelationMapper.java}            | 25 +++---
 .../IRoleService.java}                             | 23 ++----
 .../app/service/impl/RoleServiceImpl.java          | 88 ++++++++++++++++++++++
 .../app/service/impl/UserServiceImpl.java          | 11 +++
 .../apache/seatunnel/app/dal/mapper/RoleMapper.xml | 39 ++++++++++
 .../app/dal/mapper/RoleUserRelationMapper.xml      | 43 +++++++++++
 .../dolphinscheduler/dto/ProcessDefinitionDto.java |  2 +-
 .../dolphinscheduler/impl/JobServiceImpl.java      |  4 +-
 20 files changed, 387 insertions(+), 135 deletions(-)

diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/RoleTypeEnum.java
similarity index 89%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/RoleTypeEnum.java
index 1b050c516..cd2566abc 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/RoleTypeEnum.java
@@ -17,14 +17,15 @@
 
 package org.apache.seatunnel.app.common;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
+public enum RoleTypeEnum {
+    NORMAL(0, "NORMAL_ROLE"),
+    ADMIN(1, "ADMIN_ROLE"),
     ;
 
     private final int code;
     private final String  description;
 
-    UserTypeEnum(int code, String description) {
+    RoleTypeEnum(int code, String description) {
         this.code = code;
         this.description = description;
     }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
index 1b050c516..b583e6f48 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
@@ -19,6 +19,7 @@ package org.apache.seatunnel.app.common;
 
 public enum UserTypeEnum {
     NORMAL(0, "normal"),
+    ADMIN(1, "admin"),
     ;
 
     private final int code;
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
new file mode 100644
index 000000000..3f720be88
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.app.controller;
+
+import org.apache.seatunnel.app.common.Result;
+import org.apache.seatunnel.app.service.IRoleService;
+
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+
+@RequestMapping("/api/v1/auth")
+@RestController
+public class AuthController {
+
+    @Resource
+    private IRoleService roleServiceImpl;
+
+    @GetMapping("/userRole")
+    @ApiOperation(value = "check relation between user and role", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "username", value = "user name", dataType = "String"),
+            @ApiImplicitParam(name = "roleName", value = "role name", dataType = "String"),
+    })
+    public Result<Boolean> userRole(@RequestParam("username") @NotNull String username, @RequestParam("roleName") @NotNull String roleName){
+        final boolean b = roleServiceImpl.checkUserRole(username, roleName);
+        return Result.success(b);
+    }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleDao.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleDao.java
index 1b050c516..e7552e189 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleDao.java
@@ -15,25 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.dao;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import org.apache.seatunnel.app.dal.entity.Role;
 
-    private final int code;
-    private final String  description;
+public interface IRoleDao {
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+    void add(Role role);
 
-    public int getCode() {
-        return code;
-    }
-
-    public String getDescription() {
-        return description;
-    }
+    Role getByRoleName(String roleName);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleUserRelationDao.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleUserRelationDao.java
index 1b050c516..d5f0da714 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IRoleUserRelationDao.java
@@ -15,25 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.dao;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import org.apache.seatunnel.app.dal.entity.RoleUserRelation;
 
-    private final int code;
-    private final String  description;
+public interface IRoleUserRelationDao {
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+    void add(RoleUserRelation roleUserRelation);
 
-    public int getCode() {
-        return code;
-    }
+    RoleUserRelation getByUserAndRole(Integer userId, Integer roleId);
 
-    public String getDescription() {
-        return description;
-    }
+    void deleteByUserId(Integer userId);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
index bd08d294c..ebf1d19c0 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
@@ -38,4 +38,6 @@ public interface IUserDao {
     PageData<User> list(ListUserDto dto, int pageNo, int pageSize);
 
     User getById(int operatorId);
+
+    User getByName(String user);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleDaoImpl.java
similarity index 58%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleDaoImpl.java
index 1b050c516..ae0b32629 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleDaoImpl.java
@@ -15,25 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.dao.impl;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import org.apache.seatunnel.app.dal.dao.IRoleDao;
+import org.apache.seatunnel.app.dal.entity.Role;
+import org.apache.seatunnel.app.dal.mapper.RoleMapper;
 
-    private final int code;
-    private final String  description;
+import org.springframework.stereotype.Repository;
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+import javax.annotation.Resource;
+
+@Repository
+public class RoleDaoImpl implements IRoleDao {
 
-    public int getCode() {
-        return code;
+    @Resource
+    private RoleMapper roleMapper;
+
+    @Override
+    public void add(Role role){
+        roleMapper.insert(role);
     }
 
-    public String getDescription() {
-        return description;
+    @Override
+    public Role getByRoleName(String roleName) {
+        return roleMapper.selectByRole(roleName);
     }
+
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleUserRelationDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleUserRelationDaoImpl.java
new file mode 100644
index 000000000..8bc66ddce
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/RoleUserRelationDaoImpl.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.app.dal.dao.impl;
+
+import org.apache.seatunnel.app.dal.dao.IRoleUserRelationDao;
+import org.apache.seatunnel.app.dal.entity.RoleUserRelation;
+import org.apache.seatunnel.app.dal.mapper.RoleUserRelationMapper;
+
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+
+@Repository
+public class RoleUserRelationDaoImpl implements IRoleUserRelationDao {
+
+    @Resource
+    private RoleUserRelationMapper roleUserRelationMapper;
+
+    @Override
+    public void add(RoleUserRelation roleUserRelation){
+        roleUserRelationMapper.insert(roleUserRelation);
+    }
+
+    @Override
+    public RoleUserRelation getByUserAndRole(Integer userId, Integer roleId) {
+        final RoleUserRelation roleUserRelation = roleUserRelationMapper.selectByUserIdAndRoleId(userId, roleId);
+        return roleUserRelation;
+    }
+
+    @Override
+    public void deleteByUserId(Integer userId) {
+        roleUserRelationMapper.deleteByUserId(userId);
+    }
+
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
index bb29cda2b..8af3d8e52 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
@@ -101,4 +101,9 @@ public class UserDaoImpl implements IUserDao {
     public User getById(int operatorId) {
         return userMapper.selectByPrimaryKey(operatorId);
     }
+
+    @Override
+    public User getByName(String user) {
+        return userMapper.selectByName(user);
+    }
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/Role.java
similarity index 65%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/Role.java
index 1b050c516..f3e218cf6 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/Role.java
@@ -15,25 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.entity;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-    private final int code;
-    private final String  description;
+import java.util.Date;
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class Role {
 
-    public int getCode() {
-        return code;
-    }
+    private Integer id;
 
-    public String getDescription() {
-        return description;
-    }
+    private Integer type;
+
+    private String roleName;
+
+    private String description;
+
+    private Date createTime;
+
+    private Date updateTime;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/RoleUserRelation.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/RoleUserRelation.java
index 1b050c516..7eeb44cad 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/entity/RoleUserRelation.java
@@ -15,25 +15,28 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.entity;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-    private final int code;
-    private final String  description;
+import java.util.Date;
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class RoleUserRelation {
 
-    public int getCode() {
-        return code;
-    }
+    private Integer id;
 
-    public String getDescription() {
-        return description;
-    }
+    private Integer roleId;
+
+    private Integer userId;
+
+    private Date createTime;
+
+    private Date updateTime;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleMapper.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleMapper.java
index 1b050c516..4e81a45f3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleMapper.java
@@ -15,25 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.mapper;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import org.apache.seatunnel.app.dal.entity.Role;
 
-    private final int code;
-    private final String  description;
+import org.apache.ibatis.annotations.Param;
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+public interface RoleMapper {
 
-    public int getCode() {
-        return code;
-    }
+    int insert(Role record);
 
-    public String getDescription() {
-        return description;
-    }
+    Role selectByRole(@Param("roleName") String roleName);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.java
index 1b050c516..5ba02dc6a 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.java
@@ -15,25 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.dal.mapper;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+import org.apache.seatunnel.app.dal.entity.RoleUserRelation;
 
-    private final int code;
-    private final String  description;
+import org.apache.ibatis.annotations.Param;
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
+public interface RoleUserRelationMapper {
 
-    public int getCode() {
-        return code;
-    }
+    int insert(RoleUserRelation record);
+
+    RoleUserRelation selectByUserIdAndRoleId(@Param("userId")Integer userId, @Param("roleId")Integer roleId);
+
+    void deleteByUserId(@Param("userId")Integer userId);
 
-    public String getDescription() {
-        return description;
-    }
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IRoleService.java
similarity index 66%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IRoleService.java
index 1b050c516..3dcf1e321 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/common/UserTypeEnum.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IRoleService.java
@@ -15,25 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.common;
+package org.apache.seatunnel.app.service;
 
-public enum UserTypeEnum {
-    NORMAL(0, "normal"),
-    ;
+public interface IRoleService {
+    boolean addUserToRole(Integer userId, Integer type);
 
-    private final int code;
-    private final String  description;
+    boolean checkUserRole(String username, String roleName);
 
-    UserTypeEnum(int code, String description) {
-        this.code = code;
-        this.description = description;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public String getDescription() {
-        return description;
-    }
+    void deleteByUserId(Integer id);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/RoleServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/RoleServiceImpl.java
new file mode 100644
index 000000000..e0f317163
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/RoleServiceImpl.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.app.service.impl;
+
+import static org.apache.seatunnel.server.common.SeatunnelErrorEnum.NO_SUCH_USER;
+import static com.google.common.base.Preconditions.checkState;
+
+import org.apache.seatunnel.app.common.RoleTypeEnum;
+import org.apache.seatunnel.app.dal.dao.IRoleDao;
+import org.apache.seatunnel.app.dal.dao.IRoleUserRelationDao;
+import org.apache.seatunnel.app.dal.dao.IUserDao;
+import org.apache.seatunnel.app.dal.entity.Role;
+import org.apache.seatunnel.app.dal.entity.RoleUserRelation;
+import org.apache.seatunnel.app.dal.entity.User;
+import org.apache.seatunnel.app.service.IRoleService;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import java.util.Objects;
+
+@Service
+@Slf4j
+public class RoleServiceImpl implements IRoleService {
+
+    @Resource
+    private IRoleDao roleDaoImpl;
+
+    @Resource
+    private IRoleUserRelationDao roleUserRelationDaoImpl;
+
+    @Resource
+    private IUserDao userDaoImpl;
+
+    @Override
+    public boolean addUserToRole(Integer userId, Integer type){
+
+        String roleName = type == RoleTypeEnum.ADMIN.getCode() ? RoleTypeEnum.ADMIN.getDescription() : RoleTypeEnum.NORMAL.getDescription();
+
+        final Role role = roleDaoImpl.getByRoleName(roleName);
+
+        final RoleUserRelation build = RoleUserRelation.builder()
+                .roleId(role.getId())
+                .userId(userId)
+                .build();
+
+        roleUserRelationDaoImpl.add(build);
+        return true;
+    }
+
+    @Override
+    public boolean checkUserRole(String username, String roleName){
+
+        final User user = userDaoImpl.getByName(username);
+
+        checkState(!Objects.isNull(user), NO_SUCH_USER.getTemplate());
+
+        final Role role = roleDaoImpl.getByRoleName(roleName);
+
+        final RoleUserRelation byUserAndRole = roleUserRelationDaoImpl.getByUserAndRole(user.getId(), role.getId());
+
+        return !Objects.isNull(byUserAndRole);
+
+    }
+
+    @Override
+    public void deleteByUserId(Integer userId) {
+        roleUserRelationDaoImpl.deleteByUserId(userId);
+    }
+
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
index 94b11c385..db34ce159 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
@@ -27,12 +27,14 @@ import org.apache.seatunnel.app.domain.request.user.UserListReq;
 import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.user.AddUserRes;
 import org.apache.seatunnel.app.domain.response.user.UserSimpleInfoRes;
+import org.apache.seatunnel.app.service.IRoleService;
 import org.apache.seatunnel.app.service.IUserService;
 import org.apache.seatunnel.app.util.PasswordUtils;
 import org.apache.seatunnel.server.common.PageData;
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 
@@ -44,10 +46,14 @@ public class UserServiceImpl implements IUserService {
     @Resource
     private IUserDao userDaoImpl;
 
+    @Resource
+    private IRoleService roleServiceImpl;
+
     @Value("${user.default.passwordSalt:seatunnel}")
     private String defaultSalt;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public AddUserRes add(AddUserReq addReq) {
         // 1. check duplicate user first
         userDaoImpl.checkUserExists(addReq.getUsername());
@@ -65,6 +71,9 @@ public class UserServiceImpl implements IUserService {
         final int userId = userDaoImpl.add(dto);
         final AddUserRes res = new AddUserRes();
         res.setId(userId);
+
+        // 3. add to role
+        roleServiceImpl.addUserToRole(userId, addReq.getType().intValue());
         return res;
     }
 
@@ -83,8 +92,10 @@ public class UserServiceImpl implements IUserService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void delete(int id) {
         userDaoImpl.delete(id);
+        roleServiceImpl.deleteByUserId(id);
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleMapper.xml
new file mode 100644
index 000000000..e1c133dbb
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleMapper.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.apache.seatunnel.app.dal.mapper.RoleMapper">
+  <resultMap id="BaseResultMap" type="org.apache.seatunnel.app.dal.entity.Role">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="type" jdbcType="INTEGER" property="type" />
+    <result column="role_name" jdbcType="VARCHAR" property="roleName" />
+    <result column="description" jdbcType="VARCHAR" property="description" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    id, `type`, `role_name`, `description`, create_time, update_time
+  </sql>
+  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="org.apache.seatunnel.app.dal.entity.Role" useGeneratedKeys="true">
+    insert into `role` (`type`, `role_name`, `description`)
+    values (#{type,jdbcType=INTEGER}, #{roleName,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR})
+  </insert>
+  <select id="selectByRole" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from `role`
+    where role_name = #{roleName,jdbcType=VARCHAR}
+  </select>
+</mapper>
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.xml
new file mode 100644
index 000000000..27d5132c4
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/RoleUserRelationMapper.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.apache.seatunnel.app.dal.mapper.RoleUserRelationMapper">
+  <resultMap id="BaseResultMap" type="org.apache.seatunnel.app.dal.entity.RoleUserRelation">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="role_id" jdbcType="INTEGER" property="roleId" />
+    <result column="user_id" jdbcType="INTEGER" property="userId" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    id, role_id, user_id, create_time, update_time
+  </sql>
+  <insert id="insert" parameterType="org.apache.seatunnel.app.dal.entity.RoleUserRelation">
+    insert into role_user_relation (id, role_id, user_id)
+    values (#{id,jdbcType=INTEGER}, #{roleId,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER})
+  </insert>
+  <select id="selectByUserIdAndRoleId" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from role_user_relation
+    where role_id = #{roleId,jdbcType=INTEGER}
+    and user_id = #{userId,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByUserId">
+    delete from role_user_relation
+    where user_id = #{userId,jdbcType=INTEGER}
+  </delete>
+</mapper>
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java
index 68504d432..58be7eb05 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/dto/ProcessDefinitionDto.java
@@ -38,7 +38,7 @@ public class ProcessDefinitionDto {
     private Date createTime;
     @JsonFormat(pattern = DEFAULT_DATETIME_FORMAT)
     private Date updateTime;
-    private String userName;
+    private String username;
     private String projectName;
     private String locations;
     private String scheduleReleaseState;
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
index 5aef2ad82..be898a437 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
@@ -116,8 +116,8 @@ public class JobServiceImpl implements IJobService {
                 .jobStatus(p.getReleaseState())
                 .createTime(p.getCreateTime())
                 .updateTime(p.getUpdateTime())
-                .creatorName(p.getUserName())
-                .menderName(p.getUserName())
+                .creatorName(p.getUsername())
+                .menderName(p.getUsername())
                 .build())
                 .collect(Collectors.toList());
         return new PageData<>(processPageData.getTotalCount(), data);