Browse Source

fix: cannot login with non-root account (#870)

Signed-off-by: ryjiang <jiangruiyi@gmail.com>
ryjiang 2 months ago
parent
commit
facbab694c

+ 14 - 2
client/src/components/menu/NavMenu.tsx

@@ -1,4 +1,4 @@
-import { useState, FC, useEffect } from 'react';
+import { useState, FC, useEffect, useContext } from 'react';
 import clsx from 'clsx';
 import { Theme } from '@mui/material/styles';
 import List from '@mui/material/List';
@@ -9,6 +9,7 @@ import Typography from '@mui/material/Typography';
 import { makeStyles } from '@mui/styles';
 import icons from '@/components/icons/Icons';
 import type { NavMenuItem, NavMenuType } from './Types';
+import { dataContext } from '@/context';
 
 const useStyles = makeStyles((theme: Theme) => ({
   root: {
@@ -60,6 +61,8 @@ const NavMenu: FC<NavMenuType> = props => {
   const classes = useStyles({ width });
   const [active, setActive] = useState<string>(defaultActive);
 
+  const { databases } = useContext(dataContext);
+
   useEffect(() => {
     if (defaultActive) {
       setActive(defaultActive);
@@ -68,6 +71,7 @@ const NavMenu: FC<NavMenuType> = props => {
 
   const NestList = (props: { data: NavMenuItem[]; className?: string }) => {
     const { className = '', data } = props;
+
     return (
       <>
         {data.map((v: NavMenuItem) => {
@@ -80,21 +84,29 @@ const NavMenu: FC<NavMenuType> = props => {
                 : v.iconNormalClass
               : 'icon';
 
+          const disabled = v.label === 'Database' && databases.length === 0;
+          const disabledTooltip = `No database available. Please create a database first.`;
+
           return (
             <ListItem
               key={v.label}
               title={v.label}
+              disabled={disabled}
               className={clsx(classes.item, {
                 [className]: className,
                 ['active']: isActive,
                 ['attu']: v.icon === icons.attu,
               })}
               onClick={() => {
+                if (disabled) return;
                 setActive(v.label);
                 v.onClick && v.onClick();
               }}
             >
-              <Tooltip title={v.label} placement="right">
+              <Tooltip
+                title={disabled ? disabledTooltip : v.label}
+                placement="right"
+              >
                 <ListItemIcon className="itemIcon">
                   <IconComponent classes={{ root: iconClass }} />
                 </ListItemIcon>

+ 0 - 1
client/src/context/hooks/useDatabaseManagement.ts

@@ -17,7 +17,6 @@ export const useDatabaseManagement = () => {
         updateLoading && setLoadingDatabases(true);
         const newDatabases = await DatabaseService.listDatabases();
         if (newDatabases.length === 0) {
-          logout();
           return;
         }
         setDatabases(newDatabases);

+ 3 - 1
server/src/milvus/milvus.service.ts

@@ -120,7 +120,9 @@ export class MilvusService {
         await milvusClient.use({ db_name: db });
         await milvusClient.listDatabases();
       } catch (e) {
-        throw new Error(
+        await milvusClient.closeConnection();
+        throw HttpErrors(
+          HTTP_STATUS_CODE.FORBIDDEN,
           `You don't have permission to access the database: ${db}.`
         );
       }