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解决常见浏览器兼容问题的12种方法
Jan 04 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
Sep 18 Javascript
详解JavaScript UTC时间转换方法
Jan 07 Javascript
详解WordPress开发中get_current_screen()函数的使用
Jan 11 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
JS数组Object.keys()方法的使用示例
Jun 05 Javascript
vue实现单一筛选、删除筛选条件
Oct 26 Javascript
JavaScript实现alert弹框效果
Nov 19 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
移动前端图片压缩上传的实例
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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php数组去除空值函数分享
2015/02/02 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
javascript的this关键字详解
2019/05/20 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
增大python字体的方法步骤
2020/07/05 Python
python中entry用法讲解
2020/12/04 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
新颖的化妆品活动方案
2014/08/21 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
小型婚礼主持词
2015/06/30 职场文书
宿舍管理制度范本
2015/08/07 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书