import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { useAuthStore } from '@/stores/authStore' import { Home, Shield } from 'lucide-react' import { ReactNode } from 'react' import { useNavigate } from 'react-router-dom' interface ProtectedRouteProps { children: ReactNode requiredRole?: 'admin' | 'editor' | 'user' fallback?: ReactNode } export function ProtectedRoute({ children, requiredRole, fallback }: ProtectedRouteProps) { const { user, isAuthenticated } = useAuthStore() const navigate = useNavigate() // 如果未登录,这个检查应该在 App.tsx 层面处理 if (!isAuthenticated || !user) { return null } // 角色权限检查 if (requiredRole) { const roleHierarchy = { user: 0, editor: 1, admin: 2, } const userRoleLevel = roleHierarchy[user.role] || 0 const requiredRoleLevel = roleHierarchy[requiredRole] || 0 if (userRoleLevel < requiredRoleLevel) { if (fallback) { return <>{fallback}> } return (
抱歉,您没有访问此页面的权限。
当前角色: {getRoleText(user.role)}
需要角色: {getRoleText(requiredRole)}