React-Router如何進行頁面權(quán)限管理的方法
前言
在一個復(fù)雜的SAP應(yīng)用中,我們可能需要根據(jù)用戶的角色控制用戶進行頁面的權(quán)限,甚至在用戶進入系統(tǒng)之前就進行權(quán)限的控制。本文就此一權(quán)限控制進行討論。本文假設(shè)讀者了解React和React-Router的相關(guān)使用。
從傳統(tǒng)的Router開始
一個傳統(tǒng)的路由大概長下邊這個樣式,這是沒有添加任何權(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個頁面 IndexPage, PhotoPage,InfoPage。
添加第一個權(quán)限
假設(shè)我們需要在用戶進入PhotoPage之前需要驗證用戶是否有權(quán)限,根據(jù)store的的一個狀態(tài)去判斷。
先添加如下一個函數(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} />
通過以上,就完成了第一個權(quán)限的添加
進入系統(tǒng)之前就進行權(quán)限控制
如果需要在進入系統(tǒng)之前就進行權(quán)限控制,那么就需要改變一下策略。
比如上邊的例子,加入state的admin并未加載,那么就需要在上一層的route進行數(shù)據(jù)加載
首先添加一個加載數(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>
這樣在進入下邊之前,就會先進行數(shù)據(jù)加載。
通過以上簡單幾步,一個完整的權(quán)限控制鏈就完成了.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
React Native 使用Fetch發(fā)送網(wǎng)絡(luò)請求的示例代碼
本篇文章主要介紹了React Native 使用Fetch發(fā)送網(wǎng)絡(luò)請求的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12React 的調(diào)和算法Diffing 算法策略詳解
React的調(diào)和算法,主要發(fā)生在render階段,調(diào)和算法并不是一個特定的算法函數(shù),而是指在調(diào)和過程中,為提高構(gòu)建workInProcess樹的性能,以及Dom樹更新的性能,而采用的一種策略,又稱diffing算法2021-12-12React使用hook如何實現(xiàn)數(shù)據(jù)雙向綁定
這篇文章主要介紹了React使用hook如何實現(xiàn)數(shù)據(jù)雙向綁定方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03