# 权限管理

# 页面路径

  • /pages_plugs/system/permission/list

# 相关云函数路径

  • /router/service/admin/system/permission/

# 功能介绍

传送门 (opens new window)


# 页面权限拦截

框架内置了页面权限拦截机制,在用户跳转页面时,自动检查该页面是否在用户的菜单权限列表中。若无权限,会自动跳转到 403 无权限页面。

# 工作原理

应用启动时(onLaunch),框架通过 uni.addInterceptor 拦截 redirectTonavigateToreLaunch 三种页面跳转方式,在跳转前执行权限检查:

  1. 403 页面自身不做检查(防止无限重定向)
  2. 判断页面是否在 checkPermissionPages 规则范围内
  3. 检查用户的菜单列表($app.menuList)中是否存在该页面
  4. 无权限时调用 vk.navigateTo403() 跳转到 403 页面

# 配置说明

app.config.js 中配置以下两项:

# checkPermissionPages

控制哪些页面需要检查菜单权限:

checkPermissionPages: {
  /**
   * 如果 mode = 1 则代表 list 内的页面需要检查菜单权限,不在 list 内的页面不需要检查
   * 如果 mode = 2 则代表 list 内的页面不需要检查菜单权限,不在 list 内的页面需要检查
   * 注意: list 内是通配符表达式,非正则表达式
   */
  mode: 2,
  list: ['/pages/index/index', '/pages/login/*'],
},
1
2
3
4
5
6
7
8
9

# noPermission

指定 403 无权限页面的路径:

noPermission: {
  url: '/pages_plugs/error/403',
},
1
2
3

# 与 checkTokenPages 的关系

配置项 作用 前置条件
checkTokenPages 控制哪些页面需要登录
checkPermissionPages 控制哪些页面需要菜单权限 页面需要先通过登录检查

两者独立配置,互不干扰。如果一个页面不需要登录,则也不会检查菜单权限。

# 常见配置示例

示例 1:排除首页和登录页,其余页面均检查权限(默认配置)

checkPermissionPages: {
  mode: 2,
  list: ['/pages/index/index', '/pages/login/*'],
},
1
2
3
4

示例 2:只对特定业务页面检查权限

checkPermissionPages: {
  mode: 1,
  list: ['/pages/system/*', '/pages/order/*'],
},
1
2
3
4