Skip to content

Commit

Permalink
fix: admin menu permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
dolphin0618 committed Jun 19, 2024
1 parent afdfe5a commit d52225c
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
3 changes: 2 additions & 1 deletion src/frontend/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { Toaster } from "./components/bs-ui/toast";
import { alertContext } from "./contexts/alertContext";
import { locationContext } from "./contexts/locationContext";
import { userContext } from "./contexts/userContext";
import { getPrivateRouter, publicRouter } from "./routes";
import { getAdminRouter, getPrivateRouter, publicRouter } from "./routes";

export default function App() {
let { setCurrent, setShowSideBar, setIsStackedOpen } = useContext(locationContext);
Expand Down Expand Up @@ -172,6 +172,7 @@ export default function App() {

// 动态路由根据权限
const router = useMemo(() => {
if (['admin', 'group_admin'].includes(user.role)) return getAdminRouter()
return user?.user_id ? getPrivateRouter(user.web_menu) : null
}, [user])

Expand Down
13 changes: 9 additions & 4 deletions src/frontend/src/layout/MainLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { SelectHover, SelectHoverItem } from "@/components/bs-ui/select/hover";
import { LockClosedIcon } from "@radix-ui/react-icons";
import i18next from "i18next";
import { Globe } from "lucide-react";
import { useContext, useEffect, useState } from "react";
import { useContext, useEffect, useMemo, useState } from "react";
import { ErrorBoundary } from "react-error-boundary";
import { useTranslation } from "react-i18next";
import { Link, NavLink, Outlet, useNavigate } from "react-router-dom";
Expand Down Expand Up @@ -48,6 +48,11 @@ export default function MainLayout() {
navigator('/reset')
}

// 系统管理员(超管、组超管)
const isAdmin = useMemo(() => {
return ['admin', 'group_admin'].includes(user.role)
}, [user])

return <div className="flex">
<div className="bg-background-main w-full h-screen">
<div className="flex justify-between h-[64px]">
Expand Down Expand Up @@ -106,17 +111,17 @@ export default function MainLayout() {
<ApplicationIcon className="h-6 w-6 my-[12px]" /><span className="mx-[14px] max-w-[48px] text-[14px] leading-[48px]">{t('menu.app')}</span>
</NavLink>
{
user.web_menu.includes('build') && <NavLink to='/build' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`} >
(isAdmin || user.web_menu.includes('build')) && <NavLink to='/build' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`} >
<TechnologyIcon className="h-6 w-6 my-[12px]" /><span className="mx-[14px] max-w-[48px] text-[14px] leading-[48px]">{t('menu.skills')}</span>
</NavLink>
}
{
user.web_menu.includes('knowledge') && <NavLink to='/filelib' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`}>
(isAdmin || user.web_menu.includes('knowledge')) && <NavLink to='/filelib' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`}>
<KnowledgeIcon className="h-6 w-6 my-[12px]" /><span className="mx-[14px] max-w-[48px] text-[14px] leading-[48px]">{t('menu.knowledge')}</span>
</NavLink>
}
{
user.web_menu.includes('model') && <NavLink to='/model' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`}>
(isAdmin || user.web_menu.includes('model')) && <NavLink to='/model' className={`navlink inline-flex rounded-lg w-full px-6 hover:bg-nav-hover h-12 mb-[3.5px]`}>
<ModelIcon className="h-6 w-6 my-[12px]" /><span className="mx-[14px] max-w-[48px] text-[14px] leading-[48px]">{t('menu.models')}</span>
</NavLink>
}
Expand Down
17 changes: 11 additions & 6 deletions src/frontend/src/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ const ErrorHoc = ({ Comp }) => {
);
}

const baseConfig = {
// basename: "/pro"
}


const privateRouter = [
{
Expand Down Expand Up @@ -115,16 +119,17 @@ export const getPrivateRouter = (permissions) => {
}

return createBrowserRouter(permissions ? filterMenuItem(privateRouter) : [],
{
// basename: "/pro"
})
baseConfig)
}

export const getAdminRouter = () => {
return createBrowserRouter(privateRouter,
baseConfig)
}

export const publicRouter = createBrowserRouter([
{ path: "/", element: <LoginPage /> },
{ path: "/reset", element: <ResetPwdPage /> },
{ path: "*", element: <LoginPage /> }
],
{
// basename: "/pro"
})
baseConfig)

0 comments on commit d52225c

Please sign in to comment.