时间:2021-05-26
前言
在一个复杂的SAP应用中,我们可能需要根据用户的角色控制用户进行页面的权限,甚至在用户进入系统之前就进行权限的控制。本文就此一权限控制进行讨论。本文假设读者了解React和React-Router的相关使用。
从传统的Router开始
一个传统的路由大概长下边这个样式,这是没有添加任何权限限制的。
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。
添加第一个权限
假设我们需要在用户进入PhotoPage之前需要验证用户是否有权限,根据store的的一个状态去判断。
先添加如下一个函数
const authRequired = (nextState, replace) => { // Now you can access the store object here. const state = store.getState(); if (state.admin != 1) { replace('/'); } };函数里我们判断了state的admin是否等于1,否则跳转到首页。
然后在Route添加 onEnter={authRequired} 属性
<Route path="photo" component={PhotoPage} onEnter={authRequired} />通过以上,就完成了第一个权限的添加
进入系统之前就进行权限控制
如果需要在进入系统之前就进行权限控制,那么就需要改变一下策略。
比如上边的例子,加入state的admin并未加载,那么就需要在上一层的route进行数据加载
首先添加一个加载数据的函数
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>这样在进入下边之前,就会先进行数据加载。
通过以上简单几步,一个完整的权限控制链就完成了.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了React从react-router路由上做登陆验证控制的方法,分享给大家,具体如下:验证代码importReactfrom'react'import
react-router模块化配置因为公司的需要最近踏进了react坑,一直在挖坑填坑,在路由这一块折腾得不行。直接进入主题,配置react-router模块化
前言本文主要给大家介绍了关于react-router跳转传值的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:react-router跳转传值1.引
在react-router中组件里面的跳转可以用但是在组件外面改如何跳转,需要用到react路由的historyreplace方法和push方法使用形式一样,r
前言最近把react-router升级了一下,在使用react-router-dom是,子组件使用this.props.history找不到了,看看官方文档,找