# 為何需要額外創建一個元件檢查權限?

如果多個頁面都需要檢查是否為管理員,最好在路由層面進行控制,避免每個頁面都重複寫檢查邏輯,導致程式碼難以維護。

# 創建高階元件(HOC)檢查權限

先多創建一個高階元件 AdminRoute.js,這個元件會檢查是否為管理員,如果是管理員就顯示該頁面,否則導向首頁。

// ../components/AdminRoute.js
const AdminRoute = ({ children }) => {
 const navigate = useNavigate();
 const { userInfo } = useSelector((state) => state.userLogin);

 useEffect(() => {
  if (!userInfo || !userInfo.isAdmin) {
   navigate("/");
  }
 }, [navigate, userInfo]);

 return children; // 如果通過檢查,渲染子元件
};

export default AdminRoute;

# 路由設定

App.js 或路由設定中,使用 AdminRoute 包裹管理員專屬頁面。

import AdminRoute from "./components/AdminRoute";

<Routes>
 {/* 若非後台管理員直接無法訪問該頁面 */}
 <Route path='/admin/userlist' element={<AdminRoute><UserListPage /></AdminRoute>} />
</Routes>;

此時若去訪問有被 AdminRoute 包裹的頁面,如果不是管理員,就會被導向首頁,這樣就能達到管理員專屬頁面的效果,並避免在每頁重複撰寫檢查邏輯。