Просмотр исходного кода

fix 修复 解决通过loginId查询角色和菜单权限 而非当前用户时 报错问题

疯狂的狮子Li 1 год назад
Родитель
Сommit
a7ea096319

+ 28 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/PermissionService.java

@@ -0,0 +1,28 @@
+package org.dromara.common.core.service;
+
+import java.util.Set;
+
+/**
+ * 用户权限处理
+ *
+ * @author Lion Li
+ */
+public interface PermissionService {
+
+    /**
+     * 获取角色数据权限
+     *
+     * @param userId  用户id
+     * @return 角色权限信息
+     */
+    Set<String> getRolePermission(Long userId);
+
+    /**
+     * 获取菜单数据权限
+     *
+     * @param userId  用户id
+     * @return 菜单权限信息
+     */
+    Set<String> getMenuPermission(Long userId);
+
+}

+ 21 - 8
ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java

@@ -1,9 +1,13 @@
 package org.dromara.common.satoken.core.service;
 
 import cn.dev33.satoken.stp.StpInterface;
+import cn.hutool.core.util.ObjectUtil;
 import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.enums.UserType;
+import org.dromara.common.core.service.PermissionService;
+import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -15,19 +19,25 @@ import java.util.List;
  */
 public class SaPermissionImpl implements StpInterface {
 
+    @Autowired
+    private PermissionService permissionService;
+
     /**
      * 获取菜单权限列表
      */
     @Override
     public List<String> getPermissionList(Object loginId, String loginType) {
         LoginUser loginUser = LoginHelper.getLoginUser();
+        if (ObjectUtil.isNull(loginUser)) {
+            List<String> list = StringUtils.splitList(loginId.toString(), ":");
+            return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1))));
+        }
         UserType userType = UserType.getUserType(loginUser.getUserType());
-        if (userType == UserType.SYS_USER) {
-            return new ArrayList<>(loginUser.getMenuPermission());
-        } else if (userType == UserType.APP_USER) {
+        if (userType == UserType.APP_USER) {
             // 其他端 自行根据业务编写
         }
-        return new ArrayList<>();
+        // SYS_USER 默认返回权限
+        return new ArrayList<>(loginUser.getMenuPermission());
     }
 
     /**
@@ -36,12 +46,15 @@ public class SaPermissionImpl implements StpInterface {
     @Override
     public List<String> getRoleList(Object loginId, String loginType) {
         LoginUser loginUser = LoginHelper.getLoginUser();
+        if (ObjectUtil.isNull(loginUser)) {
+            List<String> list = StringUtils.splitList(loginId.toString(), ":");
+            return new ArrayList<>(permissionService.getRolePermission(Long.parseLong(list.get(1))));
+        }
         UserType userType = UserType.getUserType(loginUser.getUserType());
-        if (userType == UserType.SYS_USER) {
-            return new ArrayList<>(loginUser.getRolePermission());
-        } else if (userType == UserType.APP_USER) {
+        if (userType == UserType.APP_USER) {
             // 其他端 自行根据业务编写
         }
-        return new ArrayList<>();
+        // SYS_USER 默认返回权限
+        return new ArrayList<>(loginUser.getRolePermission());
     }
 }

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java

@@ -1,11 +1,12 @@
 package org.dromara.system.service.impl;
 
+import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.TenantConstants;
+import org.dromara.common.core.service.PermissionService;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.service.ISysMenuService;
 import org.dromara.system.service.ISysPermissionService;
 import org.dromara.system.service.ISysRoleService;
-import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
@@ -18,7 +19,7 @@ import java.util.Set;
  */
 @RequiredArgsConstructor
 @Service
-public class SysPermissionServiceImpl implements ISysPermissionService {
+public class SysPermissionServiceImpl implements ISysPermissionService, PermissionService {
 
     private final ISysRoleService roleService;
     private final ISysMenuService menuService;