React-Router如何進(jìn)行頁面權(quán)限管理的方法
前言
在一個(gè)復(fù)雜的SAP應(yīng)用中,我們可能需要根據(jù)用戶的角色控制用戶進(jìn)行頁面的權(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)的路由大概長下邊這個(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è)頁面 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)到首頁。
然后在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ù)加載。
通過以上簡單幾步,一個(gè)完整的權(quán)限控制鏈就完成了.
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ReactNative實(shí)現(xiàn)弧形拖動(dòng)條的代碼案例
本文介紹了ReactNative實(shí)現(xiàn)弧形拖動(dòng)條,本組件使用到了react-native-svg和PanResponder,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-02-02React Native 使用Fetch發(fā)送網(wǎng)絡(luò)請(qǐng)求的示例代碼
本篇文章主要介紹了React Native 使用Fetch發(fā)送網(wǎng)絡(luò)請(qǐng)求的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12React 的調(diào)和算法Diffing 算法策略詳解
React的調(diào)和算法,主要發(fā)生在render階段,調(diào)和算法并不是一個(gè)特定的算法函數(shù),而是指在調(diào)和過程中,為提高構(gòu)建workInProcess樹的性能,以及Dom樹更新的性能,而采用的一種策略,又稱diffing算法2021-12-12React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案
這篇文章主要為大家介紹了React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08React使用hook如何實(shí)現(xiàn)數(shù)據(jù)雙向綁定
這篇文章主要介紹了React使用hook如何實(shí)現(xiàn)數(shù)據(jù)雙向綁定方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03React路由鑒權(quán)的實(shí)現(xiàn)方法
這篇文章主要介紹了React路由鑒權(quán)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09