Quellcode durchsuchen

feat:超级管理员功能扩展,除admin外支持新增其它超级管理员。

lihao16 vor 2 Monaten
Ursprung
Commit
7e73014776

+ 5 - 0
smsb-common/smsb-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java

@@ -149,4 +149,9 @@ public interface UserConstants {
      */
     Long SUPER_ADMIN_ID = 1L;
 
+    /**
+     * 超级管理员ID
+     */
+    Long SUPER_ADMIN_ROLE_ID = 1L;
+
 }

+ 7 - 0
smsb-modules/smsb-system/src/main/java/org/dromara/system/service/ISysRoleService.java

@@ -197,4 +197,11 @@ public interface ISysRoleService {
 
     void cleanOnlineUserByRole(Long roleId);
 
+    /**
+     * 校验是否是超级管理员
+     *
+     * @param userId 用户ID
+     * @return 结果
+     */
+    boolean checkSuperAdminByUserId(Long userId);
 }

+ 8 - 1
smsb-modules/smsb-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java

@@ -27,6 +27,7 @@ import org.dromara.system.mapper.SysRoleMapper;
 import org.dromara.system.mapper.SysRoleMenuMapper;
 import org.dromara.system.mapper.SysTenantPackageMapper;
 import org.dromara.system.service.ISysMenuService;
+import org.dromara.system.service.ISysRoleService;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -45,6 +46,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
     private final SysRoleMenuMapper roleMenuMapper;
     private final SysTenantPackageMapper tenantPackageMapper;
 
+    private final ISysRoleService roleService;
+
     /**
      * 根据用户查询系统菜单列表
      *
@@ -135,7 +138,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
         if (LoginHelper.isSuperAdmin(userId)) {
             menus = baseMapper.selectMenuTreeAll();
         } else {
-            menus = baseMapper.selectMenuTreeByUserId(userId);
+            if (roleService.checkSuperAdminByUserId(userId)) {
+                menus = baseMapper.selectMenuTreeAll();
+            } else {
+                menus = baseMapper.selectMenuTreeByUserId(userId);
+            }
         }
         return getChildPerms(menus, 0);
     }

+ 11 - 3
smsb-modules/smsb-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java

@@ -1,11 +1,11 @@
 package org.dromara.system.service.impl;
 
+import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.TenantConstants;
 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;
@@ -36,7 +36,11 @@ public class SysPermissionServiceImpl implements ISysPermissionService {
         if (LoginHelper.isSuperAdmin(userId)) {
             roles.add(TenantConstants.SUPER_ADMIN_ROLE_KEY);
         } else {
-            roles.addAll(roleService.selectRolePermissionByUserId(userId));
+            if (roleService.checkSuperAdminByUserId(userId)) {
+                roles.add(TenantConstants.SUPER_ADMIN_ROLE_KEY);
+            }else {
+                roles.addAll(roleService.selectRolePermissionByUserId(userId));
+            }
         }
         return roles;
     }
@@ -54,7 +58,11 @@ public class SysPermissionServiceImpl implements ISysPermissionService {
         if (LoginHelper.isSuperAdmin(userId)) {
             perms.add("*:*:*");
         } else {
-            perms.addAll(menuService.selectMenuPermsByUserId(userId));
+            if (roleService.checkSuperAdminByUserId(userId)) {
+                perms.add("*:*:*");
+            } else {
+                perms.addAll(menuService.selectMenuPermsByUserId(userId));
+            }
         }
         return perms;
     }

+ 9 - 0
smsb-modules/smsb-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java

@@ -178,6 +178,15 @@ public class SysRoleServiceImpl implements ISysRoleService {
             .in(CollUtil.isNotEmpty(roleIds), "r.role_id", roleIds));
     }
 
+    @Override
+    public boolean checkSuperAdminByUserId(Long userId) {
+        List<Long> roleIds = selectRoleListByUserId(userId);
+        if (CollUtil.isNotEmpty(roleIds)) {
+            return roleIds.contains(UserConstants.SUPER_ADMIN_ROLE_ID);
+        }
+        return false;
+    }
+
     /**
      * 校验角色名称是否唯一
      *

+ 6 - 2
smsb-plus-ui/src/layout/components/Navbar.vue

@@ -10,7 +10,7 @@
     <div class="navbar-right">
       <div class="right-menu flex align-center">
         <template v-if="appStore.device !== 'mobile'">
-          <span v-if="userId === 1 && tenantEnabled && companyName" class="navbar-tenant-name" @click="openTenantDialog"
+          <span v-if="tenantShow && tenantEnabled && companyName" class="navbar-tenant-name" @click="openTenantDialog"
             style="cursor: pointer; display: inline-block; margin-right: 12px; color: #fff">
             <svg-icon icon-class="company" style="margin-right: 4px; vertical-align: middle" />
             <span style="vertical-align: middle">{{
@@ -137,8 +137,9 @@ const noticeStore = storeToRefs(useNoticeStore());
 const newNotice = ref(<number>0);
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-
+const tenantShow = ref(false);
 const userId = ref(userStore.userId);
+const permissions = ref(userStore.permissions);
 import { listTenant } from '@/api/system/tenant';
 
 const companyName = ref('');
@@ -247,6 +248,9 @@ const initTenantList = async () => {
   if (tenantEnabled.value) {
     tenantList.value = data.voList;
   }
+  if (userId.value === 1 || permissions.value?.includes('*:*:*')) {
+    tenantShow.value = true;
+  }
 };
 
 defineExpose({

+ 1 - 1
smsb-plus-ui/src/views/system/role/index.vue

@@ -83,7 +83,7 @@
             <el-tooltip v-if="scope.row.roleId !== 1" content="数据权限" placement="top">
               <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="CircleCheck" @click="handleDataScope(scope.row)"></el-button>
             </el-tooltip>
-            <el-tooltip v-if="scope.row.roleId !== 1" content="分配用户" placement="top">
+            <el-tooltip content="分配用户" placement="top">
               <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="User" @click="handleAuthUser(scope.row)"></el-button>
             </el-tooltip>
           </template>