blob: 3fa740840ba9161394ac5b58ffbd5693c40779f4 [file] [log] [blame]
// src/router/Guards.jsx
import React from 'react'
import { Navigate, Outlet, useLocation } from 'react-router-dom'
import { getAuthToken, getUserInfo } from '../utils/auth'
/** 登录检查:有 token 才放行,否则跳到 /login */
export function RequireAuth({ children }) {
const token = getAuthToken()
const loc = useLocation()
if (!token) {
return <Navigate to="/login" state={{ from: loc }} replace />
}
return children ?? <Outlet />
}
/** 角色检查:只有 allowedRoles 内的角色才能访问 */
export function RequireRole({ allowedRoles, children }) {
const user = getUserInfo()
// user 里应该有 .role
if (!user || !allowedRoles.includes(user.role)) {
return <Navigate to="/login" replace />
}
return children ?? <Outlet />
}