React-Router如何進(jìn)行頁(yè)面權(quán)限管理的方法
前言
在一個(gè)復(fù)雜的SAP應(yīng)用中,我們可能需要根據(jù)用戶的角色控制用戶進(jìn)行頁(yè)面的權(quán)限,甚至在用戶進(jìn)入系統(tǒng)之前就進(jìn)行權(quán)限的控制。本文就此一權(quán)限控制進(jìn)行討論。本文假設(shè)讀者了解React和React-Router的相關(guān)使用。
從傳統(tǒng)的Router開始
一個(gè)傳統(tǒng)的路由大概長(zhǎng)下邊這個(gè)樣式,這是沒有添加任何權(quán)限限制的。
export default (store) => {
const history = syncHistoryWithStore(hashHistory, store);
return (
<Router history={history}>
<Route path="/" component={AppRoot} >
<IndexRoute component={IndexPage} />
<Route path="photo" component={PhotoPage} />
<Route path="info" component={InfoPage} />
</Route>
{/* <Redirect path="*" to="/error" /> */}
</Router>
)
}
這里一共有3個(gè)頁(yè)面 IndexPage, PhotoPage,InfoPage。
添加第一個(gè)權(quán)限
假設(shè)我們需要在用戶進(jìn)入PhotoPage之前需要驗(yàn)證用戶是否有權(quán)限,根據(jù)store的的一個(gè)狀態(tài)去判斷。
先添加如下一個(gè)函數(shù)
const authRequired = (nextState, replace) => {
// Now you can access the store object here.
const state = store.getState();
if (state.admin != 1) {
replace('/');
}
};
函數(shù)里我們判斷了state的admin是否等于1,否則跳轉(zhuǎn)到首頁(yè)。
然后在Route添加 onEnter={authRequired} 屬性
<Route path="photo" component={PhotoPage} onEnter={authRequired} />
通過以上,就完成了第一個(gè)權(quán)限的添加
進(jìn)入系統(tǒng)之前就進(jìn)行權(quán)限控制
如果需要在進(jìn)入系統(tǒng)之前就進(jìn)行權(quán)限控制,那么就需要改變一下策略。
比如上邊的例子,加入state的admin并未加載,那么就需要在上一層的route進(jìn)行數(shù)據(jù)加載
首先添加一個(gè)加載數(shù)據(jù)的函數(shù)
function loadData(nextState, replace, callback) {
let unsubscribe;
function onStateChanged() {
const state = store.getState();
if (state.admin) {
unsubscribe();
callback();
}
}
unsubscribe = store.subscribe(onStateChanged);
store.dispatch(actions.queryAdmin());
}
接著再修改一下Router
<Router history={history}>
<Route path="/" component={AppRoot} onEnter={loadData}>
<IndexRoute component={IndexPage} />
<Route path="photo" component={PhotoPage} onEnter={authRequired} />
<Route path="info" component={InfoPage} />
</Route>
</Router>
這樣在進(jìn)入下邊之前,就會(huì)先進(jìn)行數(shù)據(jù)加載。
通過以上簡(jiǎn)單幾步,一個(gè)完整的權(quán)限控制鏈就完成了.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用react-virtualized實(shí)現(xiàn)圖片動(dòng)態(tài)高度長(zhǎng)列表的問題
一般我們?cè)趯憆eact項(xiàng)目中,同時(shí)渲染很多dom節(jié)點(diǎn),會(huì)造成頁(yè)面卡頓, 空白的情況。為了解決這個(gè)問題,今天小編給大家分享一篇教程關(guān)于react-virtualized實(shí)現(xiàn)圖片動(dòng)態(tài)高度長(zhǎng)列表的問題,感興趣的朋友跟隨小編一起看看吧2021-05-05
jenkins分環(huán)境部署vue/react項(xiàng)目的方法步驟
這篇文章主要介紹了jenkins分環(huán)境部署vue/react項(xiàng)目的方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
采用React編寫小程序的Remax框架的編譯流程解析(推薦)
這篇文章主要介紹了采用React編寫小程序的Remax框架的編譯流程解析(推薦),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
React?狀態(tài)管理工具優(yōu)劣勢(shì)示例分析
這篇文章主要為大家介紹了React?狀態(tài)管理工具優(yōu)劣勢(shì)示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
react自定義實(shí)現(xiàn)狀態(tài)管理詳解
這篇文章主要為大家詳細(xì)介紹了react如何自定義實(shí)現(xiàn)狀態(tài)管理,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
React中useTransition鉤子函數(shù)的使用詳解
React?18的推出標(biāo)志著React并發(fā)特性的正式到來(lái),其中useTransition鉤子函數(shù)是一個(gè)重要的新增功能,下面我們就來(lái)學(xué)習(xí)一下useTransition鉤子函數(shù)的具體使用吧2024-02-02
ahooks封裝cookie?localStorage?sessionStorage方法
這篇文章主要為大家介紹了ahooks封裝cookie?localStorage?sessionStorage的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

