当前位置:首页 > 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参数验证:

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

uniapp 页面权限

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

相关文章

vue如何实现默认页面

vue如何实现默认页面

实现 Vue 默认页面的方法 在 Vue 中实现默认页面通常涉及路由配置。以下是几种常见的方法: 使用路由重定向 在 Vue Router 配置中,可以通过 redirect 属性设置默认路由:…

vue实现页面切换

vue实现页面切换

Vue 实现页面切换的方法 在 Vue 中实现页面切换通常可以通过以下几种方式完成,具体选择取决于项目需求和架构设计。 使用 Vue Router Vue Router 是 Vue.js 官方推荐的…

css制作锁屏页面

css制作锁屏页面

使用CSS制作锁屏页面 锁屏页面通常包含一个背景、时间显示以及可能的解锁按钮或输入框。以下是实现锁屏页面的关键CSS代码和结构。 HTML结构 <!DOCTYPE html> <…

vue实现点击页面切换

vue实现点击页面切换

Vue 实现页面切换 在 Vue 中实现页面切换通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈。 使用 Vue Router 实现页面切换 Vue Router 是 Vue 官方提供…

h5实现登录页面跳转

h5实现登录页面跳转

实现登录页面跳转的基本方法 使用HTML5和JavaScript实现登录页面跳转,可以通过表单提交或JavaScript事件触发。以下是几种常见方式: 表单提交跳转 在HTML中创建一个表单,通过a…

h5实现页面切换

h5实现页面切换

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