blob: 3fa740840ba9161394ac5b58ffbd5693c40779f4 [file] [log] [blame]
wu2f28f672025-06-19 14:29:30 +08001// src/router/Guards.jsx
2import React from 'react'
3import { Navigate, Outlet, useLocation } from 'react-router-dom'
4import { getAuthToken, getUserInfo } from '../utils/auth'
5
6/** 登录检查:有 token 才放行,否则跳到 /login */
7export function RequireAuth({ children }) {
8 const token = getAuthToken()
9 const loc = useLocation()
10 if (!token) {
11 return <Navigate to="/login" state={{ from: loc }} replace />
12 }
13 return children ?? <Outlet />
14}
15
16/** 角色检查:只有 allowedRoles 内的角色才能访问 */
17export function RequireRole({ allowedRoles, children }) {
18 const user = getUserInfo()
19 // user 里应该有 .role
20 if (!user || !allowedRoles.includes(user.role)) {
21 return <Navigate to="/login" replace />
22 }
23 return children ?? <Outlet />
24}