当前位置:首页 > uni-app

uniapp 页面权限

2026-03-05 02:07:15uni-app

uniapp 页面权限设置方法

uniapp本身没有内置的页面权限系统,但可以通过路由拦截、全局状态管理或后端接口验证实现权限控制。以下是几种常见方案:

路由拦截pages.json中配置页面路由,通过uni.addInterceptor拦截路由跳转,检查用户权限后再决定是否放行。

uni.addInterceptor('navigateTo', {
  invoke(args) {
    const allowedRoutes = ['/pages/home', '/pages/public']
    if (!allowedRoutes.includes(args.url)) {
      uni.showToast({ title: '无权限访问', icon: 'none' })
      return false
    }
    return args
  }
})

自定义权限指令 创建全局指令或组件,在页面元素上控制显隐:

Vue.directive('auth', {
  inserted(el, binding) {
    const hasAuth = checkAuth(binding.value)
    if (!hasAuth) el.parentNode.removeChild(el)
  }
})

模板中使用:

<button v-auth="'admin'">管理员按钮</button>

后端验证方案 页面加载时请求接口验证权限:

onLoad() {
  uni.request({
    url: '/api/check_page_auth',
    success(res) {
      if (!res.data.hasAuth) uni.navigateBack()
    }
  })
}

权限数据管理方案

Vuex状态管理 在store中维护权限数据:

const store = new Vuex.Store({
  state: {
    permissions: []
  },
  mutations: {
    setPermissions(state, payload) {
      state.permissions = payload
    }
  }
})

本地缓存持久化 配合uni.setStorageSync实现权限持久化:

// 登录后存储权限
uni.setStorageSync('userPermissions', ['page1', 'page2'])

// 页面中检查
const hasPermission = uni.getStorageSync('userPermissions').includes('page1')

动态路由实现

根据权限动态生成路由表:

function generateRoutes(permissions) {
  return permissions.map(p => ({
    path: `/${p}`,
    style: { ... }
  }))
}

// 更新pages.json
uni.setStorageSync('dynamicRoutes', generateRoutes(['page1']))

最佳实践建议

  • 前后端配合:前端做初步拦截,后端接口需做最终权限验证
  • 权限粒度控制:建议采用RBAC(基于角色的访问控制)模型
  • 错误处理:无权限时提供友好提示或跳转默认页
  • 开发环境:通过环境变量区分权限验证的严格程度

扩展方案

插件化权限系统 封装权限插件:

const authPlugin = {
  install(Vue) {
    Vue.prototype.$auth = {
      check(permission) {
        // 实现检查逻辑
      }
    }
  }
}
Vue.use(authPlugin)

H5端特殊处理 针对浏览器端增加URL参数验证:

uniapp 页面权限

if (process.env.VUE_APP_PLATFORM === 'h5') {
  window.addEventListener('popstate', checkPageAuth)
}

标签: 权限页面
分享给朋友:

相关文章

h5实现页面切换

h5实现页面切换

h5实现页面切换的方法 在H5中实现页面切换可以通过多种方式完成,包括使用原生HTML链接、JavaScript动态加载、框架路由等。以下是几种常见的方法: 使用原生HTML的<a>标签…

vue指令实现权限

vue指令实现权限

Vue 指令实现权限控制 在 Vue 中,可以通过自定义指令来实现前端权限控制。以下是一种常见的实现方式: 自定义权限指令 // 在 main.js 或单独的文件中定义指令 Vue.directi…

vue实现页面切换

vue实现页面切换

Vue 实现页面切换的方法 Vue 中实现页面切换通常使用 Vue Router,这是 Vue.js 官方的路由管理器。以下是几种常见的实现方式: 使用 Vue Router 的基本配置 安装 Vu…

vue实现反馈页面

vue实现反馈页面

Vue 实现反馈页面的方法 表单组件设计 使用 Vue 的 v-model 实现表单数据双向绑定,创建包含输入框、下拉框和提交按钮的基础表单结构。表单字段通常包括用户姓名、联系方式、反馈类型和详细内容…

实现js页面跳转页面

实现js页面跳转页面

使用 window.location.href 通过修改 window.location.href 实现跳转,浏览器会加载新页面并记录到历史记录中: window.location.href = "…

vue权限怎么实现

vue权限怎么实现

Vue 权限实现方案 基于路由的权限控制 在路由配置中为每个路由添加 meta 字段,定义所需权限。使用路由守卫 beforeEach 进行权限校验。 // router.js const rout…