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 相关文章推荐
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
javascript事件冒泡和事件捕获详解
May 26 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
微信小程序slider组件使用详解
Jan 31 Javascript
vue2中使用less简易教程
Mar 27 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
详解TypeScript的基础类型
Feb 18 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
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
php实现简单的上传进度条
2015/11/17 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
Python 时间处理datetime实例
2008/09/06 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
大三在校生电子商务求职信
2013/10/29 职场文书
十八届三中全会感言
2014/03/10 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
酒店管理求职信范文
2014/04/06 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
社保转移委托书范本
2014/10/08 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
2015年维修工作总结
2015/04/25 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
Java 数组内置函数toArray详解
2021/06/28 Java/Android