Parcourir la source

fix:1、解决非admin超管账号登录报错“没有权限访问用户数据”问题。2、限制仅超管账号可设置其它账号为超管

lihao16 il y a 2 mois
Parent
commit
ae687f7d2a

+ 5 - 3
smsb-modules/smsb-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -106,9 +106,11 @@ public class SysUserController extends BaseController {
     public R<UserInfoVo> getInfo() {
         UserInfoVo userInfoVo = new UserInfoVo();
         LoginUser loginUser = LoginHelper.getLoginUser();
-        if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) {
-            // 超级管理员 如果重新加载用户信息需清除动态租户
-            TenantHelper.clearDynamic();
+        if (TenantHelper.isEnable()) {
+            if (LoginHelper.isSuperAdmin() || roleService.checkSuperAdminByUserId(loginUser.getUserId())) {
+                // 超级管理员 如果重新加载用户信息需清除动态租户
+                TenantHelper.clearDynamic();
+            }
         }
         SysUserVo user = userService.selectUserById(loginUser.getUserId());
         if (ObjectUtil.isNull(user)) {

+ 8 - 5
smsb-modules/smsb-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java

@@ -22,6 +22,7 @@ import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.SysRole;
 import org.dromara.system.domain.SysRoleDept;
 import org.dromara.system.domain.SysRoleMenu;
@@ -180,11 +181,13 @@ public class SysRoleServiceImpl implements ISysRoleService {
 
     @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;
+        return TenantHelper.ignore(() -> {
+            List<Long> roleIds = selectRoleListByUserId(userId);
+            if (CollUtil.isNotEmpty(roleIds)) {
+                return roleIds.contains(UserConstants.SUPER_ADMIN_ROLE_ID);
+            }
+            return false;
+        });
     }
 
     /**

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

@@ -83,7 +83,10 @@
             <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 content="分配用户" placement="top">
+            <el-tooltip v-if="scope.row.roleId !== 1" content="分配用户" placement="top">
+              <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="User" @click="handleAuthUser(scope.row)"></el-button>
+            </el-tooltip>
+            <el-tooltip v-if="scope.row.roleId === 1 && isSuperAdmin" content="分配用户" placement="top">
               <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="User" @click="handleAuthUser(scope.row)"></el-button>
             </el-tooltip>
           </template>
@@ -196,7 +199,8 @@ import { addRole, changeRoleStatus, dataScope, delRole, getRole, listRole, updat
 import { roleMenuTreeselect, treeselect as menuTreeselect } from '@/api/system/menu/index';
 import { RoleVO, RoleForm, RoleQuery, DeptTreeOption } from '@/api/system/role/types';
 import { MenuTreeOption, RoleMenuTree } from '@/api/system/menu/types';
-
+import {useUserStore} from '@/store/modules/user';
+import {ref} from "vue";
 const router = useRouter();
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { sys_normal_disable } = toRefs<any>(proxy?.useDict('sys_normal_disable'));
@@ -216,6 +220,10 @@ const deptExpand = ref(true);
 const deptNodeAll = ref(false);
 const deptOptions = ref<DeptTreeOption[]>([]);
 const openDataScope = ref(false);
+const userStore = useUserStore();
+const isSuperAdmin = ref(false);
+const userId = ref(userStore.userId);
+const permissions = ref(userStore.permissions);
 
 /** 数据范围选项*/
 const dataScopeOptions = ref([
@@ -496,7 +504,16 @@ const cancelDataScope = () => {
   openDataScope.value = false;
 };
 
+const userIsSuperAdmin = () => {
+  if (userId.value === 1 || permissions.value?.includes('*:*:*')) {
+    isSuperAdmin.value = true;
+  }else {
+    isSuperAdmin.value = false;
+  }
+};
+
 onMounted(() => {
   getList();
+  userIsSuperAdmin();
 });
 </script>