diff --git a/Merge/front/src/router/Guards.jsx b/Merge/front/src/router/Guards.jsx
index 3fa7408..fe45e30 100644
--- a/Merge/front/src/router/Guards.jsx
+++ b/Merge/front/src/router/Guards.jsx
@@ -1,24 +1,53 @@
 // src/router/Guards.jsx
 import React from 'react'
-import { Navigate, Outlet, useLocation } from 'react-router-dom'
-import { getAuthToken, getUserInfo } from '../utils/auth'
+import { Navigate, Outlet, useLocation, useParams } from 'react-router-dom'
+import { 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 />
+/** 需登录 */
+export function RequireAuth() {
+  const user = getUserInfo()
+  const location = useLocation()
+  if (!user) {
+    return <Navigate to="/login" state={{ from: location }} replace />
   }
-  return children ?? <Outlet />
+  return <Outlet />
 }
 
-/** 角色检查：只有 allowedRoles 内的角色才能访问 */
-export function RequireRole({ allowedRoles, children }) {
+/** 需特定角色 */
+export function RequireRole({ allowedRoles }) {
   const user = getUserInfo()
-  // user 里应该有 .role
   if (!user || !allowedRoles.includes(user.role)) {
     return <Navigate to="/login" replace />
   }
-  return children ?? <Outlet />
+  return <Outlet />
+}
+
+/** 只能访问自己的用户详情 */
+export function RequireOwnProfile() {
+  const user = getUserInfo()
+  const { userId } = useParams()
+  if (!user || user.id.toString() !== userId) {
+    return <Navigate to="/home" replace />
+  }
+  return <Outlet />
+}
+
+/** 只能访问自己的 Admin 页面 */
+export function RequireAdminOwn() {
+  const user = getUserInfo()
+  const { userId } = useParams()
+  if (!user || user.role !== 'admin' || user.id.toString() !== userId) {
+    return <Navigate to="/login" replace />
+  }
+  return <Outlet />
+}
+
+/** 只能访问自己的 SuperAdmin 区 */
+export function RequireSuperAdminOwn() {
+  const user = getUserInfo()
+  const { userId } = useParams()
+  if (!user || user.role !== 'superadmin' || user.id.toString() !== userId) {
+    return <Navigate to="/login" replace />
+  }
+  return <Outlet />
 }
