react-ts-admin路由权限设计方案
一、react-router 与 vue-router 的区别
- react-router 没有提高拦截器的 API 设计,因为为了权限拦截的功能,需要手动封装拦截组件,根据用户权限来决定是否渲染对应的路由组件。
- vue-router 设计有动态添加路由的 api,因此可以在登录后通过角色权限的验证来动态添加权限路由,但是 react-router 并不存在动态添加路由的 api,因此必须 react 的路由组件必须在刚开始就全局注册好。根据指定的路由,在拦截组件里进行角色校验放行。
- react-router 不存在类似 vue-router 对路由的配置方式,在 generateRouter 函数中将配置对象转化为 useRouts 接收的配置方式。
1 | |
二、登录设计要点
- 登录流程:
- 表单验证通过后发起登录请求,
- 根据获取的 role 权限,
- 生成对应的侧面菜单路由。
- react 的路由组件得全部注册(前端控制路由的方式),角色访问与否,在拦截组件中进行拦截。
- 菜单的注册方式
- 配置路由时单独对应设计 siderRoutes 这个配置项。
- 在 sider 组件中对路由进行两次配置
- 根据角色权限生成可访问的侧边路由
- 生成的侧边路由配置生成满足 antd 生成菜单对应的路由结构。
- 拦截组件的设计:类比 Vue-admin 的设计理念,token 做一次登录校验,角色做一次路由放行校验。
1 | |
三、tabs 的设计
tab 的设计探索见vue 设计 tabs 和菜单联动
总原则:监视路由的变化实现 tab 和 menu 的联动。由于进行了跨组件通信,且状态数量过多,使用 redux 管理。
菜单点击路由跳转,tab 监听路由变化,生成新的 tab 或者 tab 跳转。
1 | |
- tab 本身的操作,只处理 tab 本身,对 tab 进行增删跳转由 redux 管理 tabActive,真正实现路由跳转由对 tabActive 的监视实现。
react-ts-admin路由权限设计方案
https://sunburst89757.github.io/2022/06/06/react-login-design/