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 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
Aug 01 Javascript
jquery 查找iframe父级页面元素的实现代码
Aug 28 Javascript
JSONP之我见
Mar 24 Javascript
Bootstrap在线电子商务网站实战项目5
Oct 14 Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
20行JS代码实现网页刮刮乐效果
Jun 23 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
Mar 21 Javascript
详解Ant Design of React的安装和使用方法
Dec 27 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
js实现带积分弹球小游戏
Jul 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共享内存段示例分享
2014/01/20 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
php中__toString()方法用法示例
2016/12/07 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
xml和web特殊字符
2009/04/28 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
Node.js实现数据推送
2016/04/14 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
js实现通过开始结束控制的计时器
2019/02/25 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
js实现转动骰子模型
2019/10/24 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
wxPython中listbox用法实例详解
2015/06/01 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
python绘制地震散点图
2019/06/18 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
《风娃娃》教学反思
2014/04/19 职场文书
感恩教育活动总结
2014/05/05 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
护士自我推荐信范文
2015/03/24 职场文书