You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2022/10/19 16:34:43 UTC

[incubator-streampark] branch dev updated: [Feature] Get the correct permissions after switching team (#1860)

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

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


The following commit(s) were added to refs/heads/dev by this push:
     new 8e9aac0b8 [Feature] Get the correct permissions after switching team (#1860)
8e9aac0b8 is described below

commit 8e9aac0b8fd2fccc6311ca26c248650b80edff64
Author: fanrui <19...@gmail.com>
AuthorDate: Thu Oct 20 00:34:37 2022 +0800

    [Feature] Get the correct permissions after switching team (#1860)
---
 .../console/system/authentication/ShiroRealm.java    |  2 +-
 .../console/system/controller/MenuController.java    |  1 +
 .../system/controller/PassportController.java        |  2 +-
 .../console/system/controller/UserController.java    |  2 +-
 .../streampark/console/system/mapper/MenuMapper.java |  2 +-
 .../console/system/service/MenuService.java          |  9 ++++++++-
 .../console/system/service/UserService.java          | 15 +++++++++++++--
 .../console/system/service/impl/MenuServiceImpl.java | 13 +++++++------
 .../console/system/service/impl/UserServiceImpl.java | 20 +++++++++++++-------
 .../src/main/resources/mapper/system/MenuMapper.xml  |  6 +++---
 10 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
index 3260de0af..f29b83f52 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
@@ -74,7 +74,7 @@ public class ShiroRealm extends AuthorizingRealm {
         simpleAuthorizationInfo.setRoles(roleSet);
 
         // Get user permission set
-        Set<String> permissionSet = userService.getPermissions(username);
+        Set<String> permissionSet = userService.getAllTeamPermissions(username);
         simpleAuthorizationInfo.setStringPermissions(permissionSet);
         return simpleAuthorizationInfo;
     }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
index e1612b518..fc56742b8 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
@@ -54,6 +54,7 @@ public class MenuController {
 
     @PostMapping("router")
     public RestResponse getUserRouters(Long teamId) {
+        // TODO The teamId is required, get routers should be called after choose teamId.
         ArrayList<VueRouter<Menu>> routers = this.menuService.getUserRouters(commonService.getUserId(), teamId);
         return RestResponse.success(routers);
     }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
index baaa57c0b..7fc7b5574 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
@@ -114,7 +114,7 @@ public class PassportController {
         JWTToken jwtToken = new JWTToken(token, expireTimeStr);
         String userId = RandomStringUtils.randomAlphanumeric(20);
         user.setId(userId);
-        Map<String, Object> userInfo = userService.generateFrontendUserInfo(user, jwtToken);
+        Map<String, Object> userInfo = userService.generateFrontendUserInfo(user, user.getTeamId(), jwtToken);
         return new RestResponse().data(userInfo);
     }
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
index bfca5883c..7b34db253 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
@@ -189,7 +189,7 @@ public class UserController {
         //2) get latest userInfo
         user.dataMasking();
 
-        Map<String, Object> infoMap = userService.generateFrontendUserInfo(user, null);
+        Map<String, Object> infoMap = userService.generateFrontendUserInfo(user, teamId, null);
         return new RestResponse().data(infoMap);
     }
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MenuMapper.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MenuMapper.java
index 3b446dc4c..ed47b16dd 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MenuMapper.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MenuMapper.java
@@ -27,7 +27,7 @@ import java.util.List;
 
 public interface MenuMapper extends BaseMapper<Menu> {
 
-    List<Menu> findUserPermissions(String userName);
+    List<String> findUserPermissions(@Param("userId") Long userId, @Param("teamId") Long teamId);
 
     List<Menu> findUserMenus(@Param("userId")Long userId, @Param("teamId") Long teamId);
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MenuService.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MenuService.java
index d9006b56a..02617d481 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MenuService.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MenuService.java
@@ -28,7 +28,14 @@ import java.util.Map;
 
 public interface MenuService extends IService<Menu> {
 
-    List<Menu> findUserPermissions(String username);
+    /**
+     * Get the permissions of current userId.
+     *
+     * @param userId the user Id
+     * @param teamId team id. If it's null, will find permissions from all teams.
+     * @return permissions
+     */
+    List<String> findUserPermissions(Long userId, Long teamId);
 
     List<Menu> findUserMenus(Long userId, Long teamId);
 
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
index 0d766c7ca..bf0b31a58 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
@@ -24,6 +24,8 @@ import org.apache.streampark.console.system.entity.User;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import javax.annotation.Nullable;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -105,7 +107,16 @@ public interface UserService extends IService<User> {
      */
     void resetPassword(String[] usernames) throws Exception;
 
-    Set<String> getPermissions(String username);
+    Set<String> getAllTeamPermissions(String username);
+
+    /**
+     * Get the permissions of current userId.
+     *
+     * @param userId the user Id
+     * @param teamId team id. If it's null, will find permissions from all teams.
+     * @return permissions
+     */
+    Set<String> getPermissions(Long userId, @Nullable Long teamId);
 
     List<User> getNoTokenUser();
 
@@ -115,5 +126,5 @@ public interface UserService extends IService<User> {
 
     List<User> findByAppOwner(Long teamId);
 
-    Map<String, Object> generateFrontendUserInfo(User user, JWTToken token);
+    Map<String, Object> generateFrontendUserInfo(User user, Long teamId, JWTToken token);
 }
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
index 4550f52e8..049c5f428 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MenuServiceImpl.java
@@ -44,6 +44,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -54,20 +55,20 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
     private UserService userService;
 
     @Override
-    public List<Menu> findUserPermissions(String username) {
-        User user = Optional.ofNullable(userService.findByName(username))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The username [%s] not found", username)));
+    public List<String> findUserPermissions(Long userId, Long teamId) {
+        User user = Optional.ofNullable(userService.getById(userId))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The userId [%s] not found", userId)));
         // Admin has the permission for all menus.
         if (UserType.ADMIN.equals(user.getUserType())) {
-            return this.list();
+            return this.list().stream().map(Menu::getPerms).collect(Collectors.toList());
         }
-        return this.baseMapper.findUserPermissions(username);
+        return this.baseMapper.findUserPermissions(userId, teamId);
     }
 
     @Override
     public List<Menu> findUserMenus(Long userId, Long teamId) {
         User user = Optional.ofNullable(userService.getById(userId))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The user, id:[%s] not found", userId)));
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The userId:[%s] not found", userId)));
         // Admin has the permission for all menus.
         if (UserType.ADMIN.equals(user.getUserType())) {
             return this.list(new LambdaQueryWrapper<Menu>().eq(Menu::getType, "0").orderByAsc(Menu::getOrderNum));
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
index 01d86cd91..e63836b69 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
@@ -23,7 +23,6 @@ import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.util.ShaHashUtils;
 import org.apache.streampark.console.system.authentication.JWTToken;
 import org.apache.streampark.console.system.entity.Member;
-import org.apache.streampark.console.system.entity.Menu;
 import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.mapper.UserMapper;
@@ -43,14 +42,16 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Nullable;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -166,9 +167,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
      * @return permissions
      */
     @Override
-    public Set<String> getPermissions(String username) {
-        List<Menu> permissionList = this.menuService.findUserPermissions(username);
-        return permissionList.stream().map(Menu::getPerms).collect(Collectors.toSet());
+    public Set<String> getAllTeamPermissions(String username) {
+        return getPermissions(this.findByName(username).getUserId(), null);
+    }
+
+    @Override
+    public Set<String> getPermissions(Long userId, @Nullable Long teamId) {
+        List<String> userPermissions = this.menuService.findUserPermissions(userId, teamId);
+        return new HashSet<>(userPermissions);
     }
 
     @Override
@@ -217,7 +223,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
      * @return UserInfo
      */
     @Override
-    public Map<String, Object> generateFrontendUserInfo(User user, JWTToken token) {
+    public Map<String, Object> generateFrontendUserInfo(User user, Long teamId, JWTToken token) {
         AssertUtils.checkNotNull(user);
         String username = user.getUsername();
         Map<String, Object> userInfo = new HashMap<>(8);
@@ -237,7 +243,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         userInfo.put("roles", roles);
 
         // 4) permissions
-        Set<String> permissions = this.getPermissions(username);
+        Set<String> permissions = this.getPermissions(user.getUserId(), teamId);
         userInfo.put("permissions", permissions);
 
         return userInfo;
diff --git a/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
index 659cc7b30..e8e59f6b8 100644
--- a/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
+++ b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
@@ -35,14 +35,14 @@
         <result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime"/>
     </resultMap>
 
-    <select id="findUserPermissions" resultMap="menu">
+    <select id="findUserPermissions" resultType="string">
         select distinct m.perms
         from t_role r
         left join t_member ur on (r.role_id = ur.role_id)
-        left join t_user u on (u.user_id = ur.user_id)
         left join t_role_menu rm on (rm.role_id = r.role_id)
         left join t_menu m on (m.menu_id = rm.menu_id)
-        where u.username = #{userName}
+        where ur.user_id = #{userId}
+          and (#{teamId} is null or ur.team_id = #{teamId})
         and m.perms is not null
         and m.perms &lt;&gt; ''
     </select>