فهرست منبع

Update 优化超级管理员获取全部权限的方式

不再是查询后添加到权限列表,使用通配符获
Yue 8 ماه پیش
والد
کامیت
fcac49c49c

+ 13 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-satoken/src/main/java/com/vber/common/satoken/core/service/SaPermissionImpl.java

@@ -27,7 +27,10 @@ public class SaPermissionImpl implements StpInterface {
     @Override
     public List<String> getPermissionList(Object loginId, String loginType) {
         LoginUser loginUser = LoginHelper.getLoginUser();
-        if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) {
+        if (ObjectUtil.isNull(loginUser)) {
+            return new ArrayList<>();
+        }
+        if (!loginUser.getLoginId().equals(loginId)) {
             PermissionService permissionService = getPermissionService();
             if (ObjectUtil.isNotNull(permissionService)) {
                 List<String> list = StringUtils.splitList(loginId.toString(), ":");
@@ -36,7 +39,15 @@ public class SaPermissionImpl implements StpInterface {
                 throw new ServiceException("PermissionService 实现类不存在");
             }
         }
+        // 判断是否为超级管理员
+        if (LoginHelper.isSuperAdmin(loginUser.getUserId())) {
+            // 返回通配符权限,代表拥有所有权限
+            return List.of("*");
+        }
         UserType userType = UserType.getUserType(loginUser.getUserType());
+        if (userType == UserType.APP_USER) {
+            // 其用户类型 自行根据业务编写
+        }
         if (CollUtil.isNotEmpty(loginUser.getMenuPermission())) {
             // SYS_USER 默认返回权限
             return new ArrayList<>(loginUser.getMenuPermission());
@@ -62,7 +73,7 @@ public class SaPermissionImpl implements StpInterface {
         }
         UserType userType = UserType.getUserType(loginUser.getUserType());
         if (userType == UserType.APP_USER) {
-            // 其他端 自行根据业务编写
+            // 其用户类型 自行根据业务编写
         }
         // SYS_USER 默认返回权限
         if (CollUtil.isNotEmpty(loginUser.getRolePermission())) {

+ 3 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/mapper/SysMenuMapper.java

@@ -115,11 +115,12 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
      *
      * @return 权限列表
      */
-    default List<String> selectMenuPerms() {
-        return this.selectObjs(
+    default Set<String> selectMenuPerms() {
+        List<String> list = this.selectObjs(
                 new LambdaQueryWrapper<SysMenu>()
                         .select(SysMenu::getPerms)
         );
+        return new HashSet<>(StreamUtils.filter(list, StringUtils::isNotBlank));
     }
 
 

+ 8 - 3
UI/VAP_V3.VUE/src/core/services/PermissionService.ts

@@ -13,9 +13,12 @@ export function checkPermission(value: string | string[]) {
 		value = [value]
 	}
 	if (value && value instanceof Array && value.length > 0) {
+		if (appStore.authStore.isSuperAdmin()) {
+			return true
+		}
 		const permissions = appStore.authStore.user.permissions
 		const permissionDatas = value
-		const all_permission = "*:*:*"
+		const all_permission = "*"
 		const hasPermission = permissions.some((permission) => {
 			return all_permission === permission || permissionDatas.includes(permission)
 		})
@@ -36,16 +39,18 @@ export function checkPermission(value: string | string[]) {
  * @returns {Boolean}
  */
 export function checkRole(value: string | string[]) {
+	if (appStore.authStore.isSuperAdmin()) {
+		return true
+	}
 	if (typeof value == "string") {
 		value = [value]
 	}
 	if (value && value instanceof Array && value.length > 0) {
 		const roles = appStore.authStore.user.roles
 		const permissionRoles = value
-		const super_admin = "admin"
 
 		const hasRole = roles.some((role) => {
-			return super_admin === role || permissionRoles.includes(role)
+			return permissionRoles.includes(role)
 		})
 
 		if (!hasRole) {

+ 5 - 0
UI/VAP_V3.VUE/src/stores/_auth.ts

@@ -3,6 +3,7 @@ import appStore from "@s"
 import apis from "@/api"
 import type { User } from "@@/types/User"
 import type { LoginData } from "@@/types/Account"
+import { use } from "echarts"
 
 export const useAuthStore = defineStore("auth", () => {
 	const errors = ref({})
@@ -38,6 +39,9 @@ export const useAuthStore = defineStore("auth", () => {
 			user.value.roles = ["ROLE_DEFAULT"]
 		}
 	}
+	function isSuperAdmin() {
+		return user.value.userName === "admin" || user.value.roles.includes("super_admin")
+	}
 
 	function changeAvatar(avatar: any) {
 		user.value.avatar = avatar
@@ -119,6 +123,7 @@ export const useAuthStore = defineStore("auth", () => {
 		errors,
 		user,
 		isAuthenticated,
+		isSuperAdmin,
 		login,
 		socialLogin,
 		callback,