antd-admin icon indicating copy to clipboard operation
antd-admin copied to clipboard

权限路由问题

Open xu-Aurora opened this issue 5 years ago • 8 comments

权限路由是怎么弄的?没有找到对应的文件啊,你的路由在哪里配置的?所有文件都没有找到路由呢,按理来说路由不是配置在.umirc.js文件中的嘛?

xu-Aurora avatar Jun 03 '20 01:06 xu-Aurora

参考umi文档约定式路由

superlbr avatar Jun 03 '20 03:06 superlbr

那权限怎么配置,在哪个文件

xu-Aurora avatar Jun 03 '20 06:06 xu-Aurora

参考mock/user.js里的userPermission

superlbr avatar Jun 03 '20 06:06 superlbr

@superlbr 权限路由也没有阻止history.listen中触发的接口,这个要怎么处理呢

feibi avatar Sep 01 '20 02:09 feibi

@feibi

history.listen 一般在subscriptions 中,history.listen 内触需要一是加载好当前路由的model,二是路由匹配上,虽然页面没有权限,但是这两个条件都满足,所以会触发。

无权限时页面组件并没有渲染,所以要解决这个问题,可以将订阅操作迁移到组件内,参加下面代码

  1. user页面为例,删除 user/model.jssubscriptions 代码
...
- subscriptions: {
-    setup({ dispatch, history }) {
-      history.listen(location => {
-        if (pathToRegexp('/user').exec(location.pathname)) {
-          const payload = location.query || { page: 1, pageSize: 10 }
-          dispatch({
-            type: 'query',
-            payload,
-          })
-        }
-      })
-    },
-  },
...
  1. user/Index.js 内新增订阅至componentWillMount,函数式组件页面可以使用useEffect hook
...
class User extends PureComponent {
+  componentWillMount() {
+    const { location, dispatch } = this.props
+    const payload = location.query || { page: 1, pageSize: 10 }
+    dispatch({
+      type: 'user/query',
+      payload,
+    })
+  }
...

zuiidea avatar Sep 02 '20 02:09 zuiidea

@feibi

history.listen 一般在subscriptions 中,history.listen 内触需要一是加载好当前路由的model,二是路由匹配上,虽然页面没有权限,但是这两个条件都满足,所以会触发。

无权限时页面组件并没有渲染,所以要解决这个问题,可以将订阅操作迁移到组件内,参加下面代码

  1. user页面为例,删除 user/model.jssubscriptions 代码
...
- subscriptions: {
-    setup({ dispatch, history }) {
-      history.listen(location => {
-        if (pathToRegexp('/user').exec(location.pathname)) {
-          const payload = location.query || { page: 1, pageSize: 10 }
-          dispatch({
-            type: 'query',
-            payload,
-          })
-        }
-      })
-    },
-  },
...
  1. user/Index.js 内新增订阅至componentWillMount,函数式组件页面可以使用useEffect hook
...
class User extends PureComponent {
+  componentWillMount() {
+    const { location, dispatch } = this.props
+    const payload = location.query || { page: 1, pageSize: 10 }
+    dispatch({
+      type: 'user/query',
+      payload,
+    })
+  }
...

因为项目中history.listen比较多,都移动到组件内工作量很大,想着有没有其他方式

feibi avatar Sep 02 '20 02:09 feibi

没看懂+1 就是觉得很高级

wulaizi avatar Sep 07 '22 08:09 wulaizi

这是来自QQ邮箱的假期自动回复邮件。你好,我最近正在休假中,无法亲自回复你的邮件。我将在假期结束后,尽快给你回复。

LDD123 avatar Sep 07 '22 08:09 LDD123