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 <> ''
</select>