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 相关文章推荐
JS location几个方法小姐
Jul 09 Javascript
javascript 兼容鼠标滚轮事件
Apr 07 Javascript
JavaScript 类似flash效果的立体图片浏览器
Feb 08 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
Dec 25 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
vuejs router history 配置到iis的方法
Sep 20 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远程下载类分享
2016/04/13 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
PHP对象实例化单例方法
2017/01/19 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
使用python实现rsa算法代码
2016/02/17 Python
利用python实现数据分析
2017/01/11 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
开朗女孩的自我评价
2014/02/10 职场文书
法律进机关实施方案
2014/03/12 职场文书
六五普法宣传标语
2014/10/06 职场文书
父母教会我观后感
2015/06/17 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书