blob: 992f37297c224dd4b3d447dbd89f504c29a1d050 [file] [log] [blame]
San3yuan4d0e8032025-04-04 17:21:40 +08001import { Navigate, Outlet } from 'react-router-dom'
2import React from 'react'
San3yuan2534d422025-04-08 21:43:18 +08003import { useSelector } from 'react-redux'
San3yuan4d0e8032025-04-04 17:21:40 +08004
5interface PrivateRouteProps {
San3yuan2534d422025-04-08 21:43:18 +08006 role: number
San3yuan4d0e8032025-04-04 17:21:40 +08007 redirectPath?: string
8 children?: React.ReactNode
9}
10
11const PrivateRoute = ({
San3yuan2534d422025-04-08 21:43:18 +080012 role,
San3yuan4d0e8032025-04-04 17:21:40 +080013 redirectPath = '/login',
14 children
15}: PrivateRouteProps) => {
San3yuan2534d422025-04-08 21:43:18 +080016 const isLogin = useSelector((state: any) => state.user.isLogin)
17 const userRole = useSelector((state: any) => state.user.role)
18
19 if (!isLogin) {
San3yuan4d0e8032025-04-04 17:21:40 +080020 return <Navigate to={redirectPath} replace />
21 }
22
San3yuan2534d422025-04-08 21:43:18 +080023 if (role && role >= userRole) {
24 return <Navigate to={redirectPath} replace />
25 }
26
27 return children ? (
28 <>{children}</>
29 ) : (
30 <Outlet />
31 )
32
San3yuan4d0e8032025-04-04 17:21:40 +080033}
34
35export default PrivateRoute