更新路由守卫
Change-Id: Iddd1d006202a03e8a97e3a90d64d9a43c5d2cb78
diff --git a/Merge/front/src/router/App.js b/Merge/front/src/router/App.js
index 4da6f49..d7f5f09 100644
--- a/Merge/front/src/router/App.js
+++ b/Merge/front/src/router/App.js
@@ -1,74 +1,85 @@
// src/router/index.jsx
import React from 'react'
-import { Routes, Route, Navigate, Outlet } from 'react-router-dom'
+import { Routes, Route, Navigate } from 'react-router-dom'
-import LoginPage from '../pages/LoginPage/LoginPage'
-import RegisterPage from '../pages/RegisterPage/RegisterPage'
-import ForgotPasswordPage from '../pages/ForgotPasswordPage/ForgotPasswordPage'
-import TestDashboard from '../pages/TestDashboard/TestDashboard'
-import HomeFeed from '../components/HomeFeed'
-import CreatePost from '../components/CreatePost'
-import NotebookPage from '../components/NotebookPage'
-import PlaceholderPage from '../components/PlaceholderPage'
-import UserProfile from '../components/UserProfile'
+import LoginPage from '../pages/LoginPage/LoginPage'
+import RegisterPage from '../pages/RegisterPage/RegisterPage'
+import ForgotPasswordPage from '../pages/ForgotPasswordPage/ForgotPasswordPage'
+import TestDashboard from '../pages/TestDashboard/TestDashboard'
-import AdminPage from '../components/Admin'
-import SuperAdmin from '../components/SuperAdmin'
-import UserManagement from '../components/UserManagement'
-import LogsDashboard from '../components/LogsDashboard'
-import TransactionLogs from '../components/TransactionLogs'
-import PerformanceLogs from '../components/PerformanceLogs'
+import HomeFeed from '../components/HomeFeed'
+import CreatePost from '../components/CreatePost'
+import NotebookPage from '../components/NotebookPage'
+import PlaceholderPage from '../components/PlaceholderPage'
+import UserProfile from '../components/UserProfile'
-import { RequireAuth, RequireRole } from './Guards'
+import AdminPage from '../components/Admin'
+import SuperAdmin from '../components/SuperAdmin'
+import UserManagement from '../components/UserManagement'
+import LogsDashboard from '../components/LogsDashboard'
+import TransactionLogs from '../components/TransactionLogs'
+import PerformanceLogs from '../components/PerformanceLogs'
+
+import {
+ RequireAuth,
+ RequireRole,
+ RequireOwnProfile,
+ RequireAdminOwn,
+ RequireSuperAdminOwn
+} from './Guards'
export default function AppRoutes() {
return (
<Routes>
- {/* ### 公开路由(不用登录就能看) */}
- <Route path="/login" element={<LoginPage />} />
- <Route path="/register" element={<RegisterPage />} />
- <Route path="/forgot-password" element={<ForgotPasswordPage />} />
+ {/* 1. 公开路由 */}
+ <Route path="/login" element={<LoginPage />} />
+ <Route path="/register" element={<RegisterPage />} />
+ <Route path="/forgot-password" element={<ForgotPasswordPage />} />
- {/* ### 需要登录才能访问的区域 */}
+ {/* 2. 受保护路由 */}
<Route element={<RequireAuth />}>
- {/* ---- 普通用户区块 ---- */}
- <Route element={<RequireRole allowedRoles={['user']} />}>
- <Route path="/home" element={<HomeFeed />} />
- <Route path="/posts/new" element={<CreatePost />} />
- <Route path="/notebooks" element={<NotebookPage />} />
+ {/* 2.1 任何登录用户都能看自己的主页 */}
+ <Route element={<RequireOwnProfile />}>
<Route path="/user/:userId" element={<UserProfile />} />
- <Route path="/activity" element={<PlaceholderPage pageId="activity" />} />
- <Route path="/notes" element={<PlaceholderPage pageId="notes" />} />
- <Route path="/creator" element={<PlaceholderPage pageId="creator" />} />
- <Route path="/journal" element={<PlaceholderPage pageId="journal" />} />
-
- <Route path="/dashboard/*" element={<PlaceholderPage />} />
- <Route path="/posts/new" element={<CreatePost />} />
- <Route path="/posts/edit/:postId" element={<CreatePost />} />
- <Route path="/" element={<Navigate to="/dashboard/overview" replace />} />
</Route>
- {/* ---- 管理员区块 ---- */}
+ {/* 2.2 普通用户 */}
+ <Route element={<RequireRole allowedRoles={['user']} />}>
+ <Route path="/home" element={<HomeFeed />} />
+ <Route path="/posts/new" element={<CreatePost />} />
+ <Route path="/posts/edit/:postId" element={<CreatePost />} />
+ <Route path="/notebooks" element={<NotebookPage />} />
+ <Route path="/dashboard/*" element={<PlaceholderPage />} />
+ <Route path="/activity" element={<PlaceholderPage pageId="activity" />} />
+ <Route path="/notes" element={<PlaceholderPage pageId="notes" />} />
+ <Route path="/creator" element={<PlaceholderPage pageId="creator" />} />
+ <Route path="/journal" element={<PlaceholderPage pageId="journal" />} />
+ <Route path="/" element={<Navigate to="/home" replace />} />
+ </Route>
+
+ {/* 2.3 Admin 自己的页面 */}
+ <Route element={<RequireAdminOwn />}>
+ <Route path="/admin/:userId" element={<AdminPage />} />
+ </Route>
<Route element={<RequireRole allowedRoles={['admin']} />}>
- <Route path="/admin" element={<AdminPage />} />
- <Route path="/test-dashboard" element={<TestDashboard />} />
+ <Route path="/test-dashboard" element={<TestDashboard />} />
</Route>
- {/* ---- 超级管理员区块 ---- */}
- <Route element={<RequireRole allowedRoles={['superadmin']} />}>
- <Route path="/superadmin" element={<SuperAdmin />}>
+ {/* 2.4 SuperAdmin 自己的区域 */}
+ <Route element={<RequireSuperAdminOwn />}>
+ <Route path="/superadmin/:userId/*" element={<SuperAdmin />}>
<Route index element={<Navigate to="users" replace />} />
- <Route path="users" element={<UserManagement superAdminId={3} />} />
- <Route path="dashboard" element={<LogsDashboard />}>
+ <Route path="users" element={<UserManagement />} />
+ <Route path="dashboard" element={<LogsDashboard />}>
<Route index element={<Navigate to="transactions" replace />} />
- <Route path="transactions" element={<TransactionLogs userId={1} />} />
- <Route path="performance" element={<PerformanceLogs userId={1} />} />
+ <Route path="transactions" element={<TransactionLogs />} />
+ <Route path="performance" element={<PerformanceLogs />} />
</Route>
</Route>
</Route>
</Route>
- {/* ### 兜底:不认识的地址都重定向到 /login */}
+ {/* 3. 兜底:未匹配一律回登录 */}
<Route path="*" element={<Navigate to="/login" replace />} />
</Routes>
)