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 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 Javascript
用jquery实现等比例缩放图片效果插件
Jul 24 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
JavaScript中的包装对象介绍
Jan 27 Javascript
angular简介和其特点介绍
Jan 29 Javascript
js判断输入字符串是否为空、空格、null的方法总结
Jun 14 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
vue element table 表格请求后台排序的方法
Sep 28 Javascript
微信公众号平台接口开发 获取access_token过程解析
Aug 14 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 11 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
织梦模板标记简介
2007/03/11 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
Python实现选择排序
2017/06/04 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
党建工作经验交流材料
2014/05/25 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
卖房协议书样本
2014/10/30 职场文书
出差报告格式模板
2014/11/06 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
2015年化验室工作总结
2015/04/23 职场文书
小学运动会前导词
2015/07/20 职场文书
公司保洁员管理制度
2015/08/04 职场文书