umi权限路由疑问

Created on 16 Jan 2019  ·  6Comments  ·  Source: umijs/umi

参看文档上对于权限路由的疑问

{ path: '/list', component: './pages/list.js', Routes: ['./routes/PrivateRoute.js'] }

无权限使用list.js渲染,有权限使用PrivateRoute.js权限,可是判断是否有权限的地方在哪呢?

Most helpful comment

@jervainy 在antd-pro中有权限路由的例子,代码在
文件: src/pages/Authorized.js
目录: src/component/Authrized/

原理是在用作权限验证的组件中去判断是否拥有权限(src/component/Authrized/CheckPermissions.js),支持同步或者异步的鉴权方案。

对于 src/pages/Authorized.js组件(也就是路由表中配置的那个权限判断组件):

  • 权限判断通过:
    渲染路由表中对应的component
  • 权限判断不通过:
    通过传入组件props的noMatch组件进行替换渲染,至于跳不跳转可以在noMatch组件里配置一个具有路由跳转的组件(antd-pro的提供的方案是umi/redirect),也可以放一个提示的静态页面组件,根据不同的需要来编写。

大致的实现思路是这样的,antd-pro中的鉴权使用的是localStorage的方案,也可以替换成请求接口的方案。

All 6 comments

无权限使用list.js渲染,有权限使用PrivateRoute.js权限

这个说法是不正确的。应该是渲染都会经过 ./routes/PrivateRoute.js,所以判断是否有权限应该是你自己在 ./routes/PrivateRoute.js 这个里面实现。

@yutingzhao1991PrivateRoute.js里进行权限判断的话,如果有权限怎么选择路由呢,没有权限怎么选择路由呢,还是说在PrivateRoute.js里判断权限后通过umi/router跳转路由?

@jervainy 在antd-pro中有权限路由的例子,代码在
文件: src/pages/Authorized.js
目录: src/component/Authrized/

原理是在用作权限验证的组件中去判断是否拥有权限(src/component/Authrized/CheckPermissions.js),支持同步或者异步的鉴权方案。

对于 src/pages/Authorized.js组件(也就是路由表中配置的那个权限判断组件):

  • 权限判断通过:
    渲染路由表中对应的component
  • 权限判断不通过:
    通过传入组件props的noMatch组件进行替换渲染,至于跳不跳转可以在noMatch组件里配置一个具有路由跳转的组件(antd-pro的提供的方案是umi/redirect),也可以放一个提示的静态页面组件,根据不同的需要来编写。

大致的实现思路是这样的,antd-pro中的鉴权使用的是localStorage的方案,也可以替换成请求接口的方案。

同觉得文档说得不清不楚,如果Routes数组里有多个元素是什么效果?

文件: src/pages/Authorized.js
目录: src/component/Authrized/
为什么路由上写的是在pages下面的文件,结果生效的文件却在component里面

令我困惑的是,config.js里,路由是这么写的

 path: '/',
          component: '../layouts/BasicLayout',
          Routes: ['src/pages/Authorized'],
          authority: ['admin', 'user'],

因为src/pages/ 下面并没有Authorized.js文件,所以我其实很迷糊
文档上哪里有进行介绍吗?是约定式路由的wrappers那一节吗?我看得不是很明白

文件: src/pages/Authorized.js
目录: src/component/Authrized/
为什么路由上写的是在pages下面的文件,结果生效的文件却在component里面

令我困惑的是,config.js里,路由是这么写的

 path: '/',
          component: '../layouts/BasicLayout',
          Routes: ['src/pages/Authorized'],
          authority: ['admin', 'user'],

因为src/pages/ 下面并没有Authorized.js文件,所以我其实很迷糊
文档上哪里有进行介绍吗?是约定式路由的wrappers那一节吗?我看得不是很明白

上面的讨论是基于 [email protected] 的路由配置结构,路由的 wrapper 配置项是 [email protected] 中新增的,利用它可以实现路由鉴权的能力达到与 [email protected] 中 Routes 配置一样的效果。

另外你提到的 src/pages/Authorized.js 文件不存在的问题可能是 antd-pro 的模板修改移动了位置,目前是在 src/utils/Authorized 位置。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

stoneWeb picture stoneWeb  ·  3Comments

six-666 picture six-666  ·  3Comments

kitebear picture kitebear  ·  3Comments

RunningCoderLee picture RunningCoderLee  ·  3Comments

nguyenhuutinh picture nguyenhuutinh  ·  3Comments