"use client"; import LockOutlinedIcon from "@mui/icons-material/LockOutlined"; import { Alert, Box, CircularProgress, Stack, Typography, } from "@mui/material"; import { usePathname } from "next/navigation"; import type { ReactNode } from "react"; import { Header } from "@/components/header"; import { permissionForPath } from "@/lib/permissions"; import { useAccessStore } from "@/store/accessStore"; import { useAuthStore } from "@/store/authStore"; export const RoutePermissionGuard = ({ children, authenticated, accessDeniedReason = null, }: { children: ReactNode; authenticated: boolean; accessDeniedReason?: "account" | "project" | null; }) => { const pathname = usePathname(); const permissions = useAccessStore((state) => state.permissions); const loading = useAccessStore((state) => state.loading); const sessionExpired = useAuthStore((state) => state.sessionExpired); const requiredPermission = permissionForPath(pathname); if (!authenticated || sessionExpired) { return ( 登录状态已失效 正在跳转到登录页面… ); } if (accessDeniedReason) { const accountPending = accessDeniedReason === "account"; return (
}> {accountPending ? "账号尚未获得访问权限" : "无权访问当前项目"} {accountPending ? "身份认证已成功,但当前账号尚未由系统管理员启用。请联系系统管理员完成授权后重试。" : "当前账号无法访问所选项目。请选择其他已授权项目,或联系系统管理员调整项目权限。"} ); } if (requiredPermission && loading) { return ( ); } if (requiredPermission && !permissions.includes(requiredPermission)) { return ( }> 无权访问此功能 当前项目角色缺少权限:{requiredPermission} ); } return children; };