React-Router如何进行页面权限管理的方法


Posted in Javascript onDecember 06, 2017

前言

在一个复杂的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>

这样在进入下边之前,就会先进行数据加载。

通过以上简单几步,一个完整的权限控制链就完成了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript下string.format函数补充
Aug 24 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
瀑布流布局代码一例
Apr 11 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
Bootstrap导航条鼠标悬停下拉菜单
Jan 04 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
Oct 20 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 Javascript
JS实现小米轮播图
Sep 21 Javascript
移动前端图片压缩上传的实例
Dec 06 #Javascript
详细分析JS函数去抖和节流
Dec 05 #Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
Dec 05 #Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
Dec 05 #Javascript
vue+iview写个弹框的示例代码
Dec 05 #Javascript
Node.js创建Web、TCP服务器
Dec 05 #Javascript
实例讲解javascript实现异步图片上传方法
Dec 05 #Javascript
You might like
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
JavaScript闭包详解
2015/02/02 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
物流专业求职计划书
2014/01/10 职场文书
产品促销活动策划书
2014/01/15 职场文书
银行奉献演讲稿
2014/09/16 职场文书
车辆委托书范本
2014/10/05 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书