react?路由權(quán)限動(dòng)態(tài)菜單方案配置react-router-auth-plus
正文
在 react 中做路由權(quán)限管理,一直是比較麻煩的事,不像 vue 中有進(jìn)入路由前攔截的功能。在摸魚(yú)時(shí)間擼了一個(gè)傻瓜式配置的路由權(quán)限 library (基于 react-router v6)。
react-router-auth-plus github 地址
如何使用
1. 配置路由
import { AuthRouterObject } from "react-router-auth-plus";
const routers: AuthRouterObject[] = [
{ path: "/", element: <Navigate to="/home" replace /> },
{ path: "/login", element: <Login /> },
{
element: <Layout />,
children: [
{ path: "/home", element: <Home />, auth: ["admin"] },
{ path: "/setting", element: <Setting /> },
{
path: "/application",
element: <Application />,
auth: ["application"],
},
],
},
{ path: "*", element: <NotFound /> },
];
2. 在應(yīng)用的最外層渲染路由
這里我使用 swr 來(lái)模擬獲取當(dāng)前用戶的權(quán)限,兩秒后返回。
// App.tsx
import { useAuthRouters } from "react-router-auth-plus";
const fetcher = async (url: string): Promise<string[]> =>
await new Promise((resolve) => {
setTimeout(() => {
resolve(["admin"]);
}, 2000);
});
function App() {
const { data: auth, isValidating } = useSWR("/api/user", fetcher, {
revalidateOnFocus: false,
});
return useAuthRouters({
// 當(dāng)前用戶的權(quán)限,string[]
auth: auth || [],
routers,
// 跳轉(zhuǎn)到?jīng)]權(quán)限的路由時(shí),用戶自定義顯示。這里我顯示 403 頁(yè)面。
noAuthElement: (router) => <NotAuth />,
// 用戶權(quán)限還沒(méi)請(qǐng)求到時(shí),渲染 loading
render: (element) => (isValidating ? element : <Loading />),
});
}
或你可以使用 jsx 的方式來(lái)配置
import { AuthRoute, createAuthRoutesFromChildren } from "react-router-auth-plus";
useAuthRouters({
auth: auth || [],
noAuthElement: (router) => <NotAuth />,
render: (element) => (isValidating ? element : <Loading />),
routers: createAuthRoutesFromChildren(
<Routes>
<AuthRoute path="/" element={<Navigate to="/home" replace />} />
<AuthRoute path="/login" element={<Login />} />
<AuthRoute element={<Layout />}>
<AuthRoute path="/home" element={<Home />} auth={["admin"]} />
<AuthRoute path="/setting" element={<Setting />} />
<AuthRoute
path="/application"
element={<Application />}
auth={["application"]}
/>
</AuthRoute>
<AuthRoute path="*" element={<NotFound />} />
</Routes>
),
});
這樣就完成了,是不是很傻瓜式呢?
權(quán)限說(shuō)明
若當(dāng)前 home 的權(quán)限被設(shè)置為 ["auth1", "auth2", "auth3"],當(dāng)前用戶的權(quán)限只要滿足一個(gè)就會(huì)判斷為擁有此路由的權(quán)限。
動(dòng)態(tài)菜單
react-router-auth-plus 會(huì)自動(dòng)將 children 傳給 Layout,你不必在路由配置里傳給 Layout。如果你是 ts,將 routers 類型設(shè)置為可選即可。
useAuthMenus 會(huì)過(guò)濾掉沒(méi)有權(quán)限的路由,接下來(lái)你可以自行處理一下成你想要的數(shù)據(jù)再渲染成 antd 的 Menu 組件。
import { useAuthMenus, AuthRouterObject } from "react-router-auth-plus";
interface LayoutProps {
routers?: AuthRouterObject;
}
const Layout:FC<LayoutProps> = ({ routers }) => {
const menus = useAuthMenus(routers);
...
}以上就是react 路由權(quán)限動(dòng)態(tài)菜單方案配置react-router-auth-plus的詳細(xì)內(nèi)容,更多關(guān)于react 路由權(quán)限動(dòng)態(tài)菜單的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用 React hooks 實(shí)現(xiàn)類所有生命周期
react 自 16.8 開(kāi)始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對(duì)應(yīng)的生命周期,這篇文章主要介紹了使用 React hooks 怎么實(shí)現(xiàn)類里面的所有生命周期,需要的朋友可以參考下2023-02-02
React中 Zustand狀態(tài)管理庫(kù)的使用詳解
Zustand?是一個(gè)非常輕量、簡(jiǎn)潔的狀態(tài)管理庫(kù),旨在為 React 提供簡(jiǎn)便且高效的狀態(tài)管理,相比于 Redux 或 Context API,Zustand 具有更簡(jiǎn)潔、靈活和易于理解的優(yōu)點(diǎn),感興趣的朋友一起看看吧2024-12-12
React框架快速實(shí)現(xiàn)簡(jiǎn)易的Markdown編輯器
這篇文章主要為大家介紹了使用React框架實(shí)現(xiàn)簡(jiǎn)易的Markdown編輯器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
如何使用Redux Toolkit簡(jiǎn)化Redux
redux-toolkit是目前redux官方推薦的編寫(xiě)redux邏輯的方法,針對(duì)redux的創(chuàng)建store繁瑣、樣板代碼太多、依賴外部庫(kù)等問(wèn)題進(jìn)行了優(yōu)化,官方總結(jié)了四個(gè)特點(diǎn)是簡(jiǎn)易的/有想法的/強(qiáng)勁的/高效的,總結(jié)來(lái)看,就是更加的方便簡(jiǎn)單了2022-12-12
詳解使用WebPack搭建React開(kāi)發(fā)環(huán)境
這篇文章主要介紹了詳解使用WebPack搭建React開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
react中antd Upload手動(dòng)上傳的示例
本文主要介紹了react中antd Upload手動(dòng)上傳的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

