wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 1 | // src/router/index.jsx |
| 2 | import React from 'react' |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 3 | import { Routes, Route, Navigate } from 'react-router-dom' |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 4 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 5 | import LoginPage from '../pages/LoginPage/LoginPage' |
| 6 | import RegisterPage from '../pages/RegisterPage/RegisterPage' |
| 7 | import ForgotPasswordPage from '../pages/ForgotPasswordPage/ForgotPasswordPage' |
| 8 | import TestDashboard from '../pages/TestDashboard/TestDashboard' |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 9 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 10 | import HomeFeed from '../components/HomeFeed' |
| 11 | import CreatePost from '../components/CreatePost' |
| 12 | import NotebookPage from '../components/NotebookPage' |
| 13 | import PlaceholderPage from '../components/PlaceholderPage' |
| 14 | import UserProfile from '../components/UserProfile' |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 15 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 16 | import AdminPage from '../components/Admin' |
| 17 | import SuperAdmin from '../components/SuperAdmin' |
| 18 | import UserManagement from '../components/UserManagement' |
| 19 | import LogsDashboard from '../components/LogsDashboard' |
| 20 | import TransactionLogs from '../components/TransactionLogs' |
| 21 | import PerformanceLogs from '../components/PerformanceLogs' |
| 22 | |
| 23 | import { |
| 24 | RequireAuth, |
| 25 | RequireRole, |
| 26 | RequireOwnProfile, |
| 27 | RequireAdminOwn, |
| 28 | RequireSuperAdminOwn |
| 29 | } from './Guards' |
TRM-coding | 85e5c32 | 2025-06-18 19:49:21 +0800 | [diff] [blame] | 30 | |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 31 | export default function AppRoutes() { |
| 32 | return ( |
| 33 | <Routes> |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 34 | {/* 1. 公开路由 */} |
| 35 | <Route path="/login" element={<LoginPage />} /> |
| 36 | <Route path="/register" element={<RegisterPage />} /> |
| 37 | <Route path="/forgot-password" element={<ForgotPasswordPage />} /> |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 38 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 39 | {/* 2. 受保护路由 */} |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 40 | <Route element={<RequireAuth />}> |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 41 | {/* 2.1 任何登录用户都能看自己的主页 */} |
| 42 | <Route element={<RequireOwnProfile />}> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 43 | <Route path="/user/:userId" element={<UserProfile />} /> |
956303669 | 8c2ae42 | 2025-06-20 12:54:31 +0800 | [diff] [blame^] | 44 | </Route> |
| 45 | |
| 46 | {/* 2.2 普通用户 */} |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 47 | <Route element={<RequireRole allowedRoles={['user']} />}> |
| 48 | <Route path="/home" element={<HomeFeed />} /> |
| 49 | <Route path="/posts/new" element={<CreatePost />} /> |
| 50 | <Route path="/posts/edit/:postId" element={<CreatePost />} /> |
| 51 | <Route path="/notebooks" element={<NotebookPage />} /> |
| 52 | <Route path="/dashboard/*" element={<PlaceholderPage />} /> |
| 53 | <Route path="/activity" element={<PlaceholderPage pageId="activity" />} /> |
| 54 | <Route path="/notes" element={<PlaceholderPage pageId="notes" />} /> |
| 55 | <Route path="/creator" element={<PlaceholderPage pageId="creator" />} /> |
| 56 | <Route path="/journal" element={<PlaceholderPage pageId="journal" />} /> |
| 57 | <Route path="/" element={<Navigate to="/home" replace />} /> |
| 58 | </Route> |
| 59 | |
| 60 | {/* 2.3 Admin 自己的页面 */} |
| 61 | <Route element={<RequireAdminOwn />}> |
| 62 | <Route path="/admin/:userId" element={<AdminPage />} /> |
| 63 | </Route> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 64 | <Route element={<RequireRole allowedRoles={['admin']} />}> |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 65 | <Route path="/test-dashboard" element={<TestDashboard />} /> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 66 | </Route> |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 67 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 68 | {/* 2.4 SuperAdmin 自己的区域 */} |
| 69 | <Route element={<RequireSuperAdminOwn />}> |
| 70 | <Route path="/superadmin/:userId/*" element={<SuperAdmin />}> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 71 | <Route index element={<Navigate to="users" replace />} /> |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 72 | <Route path="users" element={<UserManagement />} /> |
| 73 | <Route path="dashboard" element={<LogsDashboard />}> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 74 | <Route index element={<Navigate to="transactions" replace />} /> |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 75 | <Route path="transactions" element={<TransactionLogs />} /> |
| 76 | <Route path="performance" element={<PerformanceLogs />} /> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 77 | </Route> |
| 78 | </Route> |
TRM-coding | 85e5c32 | 2025-06-18 19:49:21 +0800 | [diff] [blame] | 79 | </Route> |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 80 | </Route> |
TRM-coding | 85e5c32 | 2025-06-18 19:49:21 +0800 | [diff] [blame] | 81 | |
wu | 70fc8c5 | 2025-06-19 15:55:03 +0800 | [diff] [blame] | 82 | {/* 3. 兜底:未匹配一律回登录 */} |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 83 | <Route path="*" element={<Navigate to="/login" replace />} /> |
TRM-coding | d1cbf67 | 2025-06-18 15:15:08 +0800 | [diff] [blame] | 84 | </Routes> |
wu | 2f28f67 | 2025-06-19 14:29:30 +0800 | [diff] [blame] | 85 | ) |
| 86 | } |