当前位置: 首页 > news >正文

uniapp开发小程序,如何根据权限动态配置按钮或页面内容

前言

写了好几个项目,发现小程序对权限控制非常麻烦,于是有了这个想法,但是网上找了一圈没有一个比较完善的讲解,因为小程序不支持自定义指令,所以不能像后台那样方便,于是就将几个博主的想法结合。
思路就是v-if或者v-show,封装一个方法就行了。

使用方法

1.写权限验证js

找个地方建一个js文件,写权限验证函数,如下
注:代码验证的前提是将权限列表存储在缓存中了,所以我直接取出来验证。如有其他逻辑请自行更改。 至于权限列表从哪里来,就不在赘述了。

import userStore from "../store/userStore.js"// 验证用户是否含有指定权限,只需包含其中一个
export function auth(authList){return authList.some((item) => {return verifySingleAuth(item);});
}// 验证用户是否含有指定权限,必须全部拥有
export function authAll(authList){return authList.every((item) => {return verifySingleAuth(item);});
}//验证权限
function verifySingleAuth(permission){const store = userStore();const all_permission = '*:*:*';	//所有权限标识const permissions = store.permissions;if (permission && permission.length > 0) {return permissions.some((v) => {return all_permission === v || v === permission;});} else {return false;}
}

2.main.js中注册为全局变量(函数)

在这里插入图片描述
贴上代码

	app.config.globalProperties.$auth=authapp.config.globalProperties.$authAll=authAll

3.页面中直接使用

缓存中的权限为'aa:*:*'

<template><view class="content">测试一验证结果:{{$auth(['aa:*:*','bb:*:*'])}}<view v-show="$auth(['aa:*:*','bb:*:*'])"><uv-button type="primary" shape="circle" text="按钮"></uv-button></view></view>
</template>

在这里插入图片描述

缓存中的权限为'aa:*:*'

<template><view class="content">全部权限验证结果:{{$authAll(['aa:*:*','bb:*:*'])}}<view v-show="$authAll(['aa:*:*','bb:*:*'])"><uv-button type="primary" shape="circle" text="按钮"></uv-button></view></view>
</template>

在这里插入图片描述
搞定,示例中使用的是v-show,当然,使用v-if也是可以的,但是我发现,每当页面有值变化时,都会重复的调用,而且会调很多次,我猜测应该是数据变化,会重新渲染Dom,导致重复判断,可能会导致性能下降或者卡顿,所以我选择使用v-show。

相关文章:

  • 【Java学习笔记】抽象类
  • Redis 性能优化:核心技术、技巧与最佳实践
  • C++(4)
  • 第7章:Zephyr 的低功耗机制
  • 跟着华为去变革 ——读《常变与长青》有感
  • 读懂 std::true_type 和 std::false_type
  • 2025年- H52-Lc160--114. 二叉树展开为链表(前序遍历 + 用栈 + 原地修改)--Java版
  • 04_redis之ZSet使用实例-积分榜
  • leetcode-295 Find Median from Data Stream
  • Wan2.1 图生视频 多卡推理批量生成视频
  • 视频问答功能播放器(视频问答)视频弹题功能实例
  • ffmpeg转换竖屏(画面是横屏旋转90度的竖屏文件格式)视频到横屏
  • 网易互娱游戏研发实习一面
  • 在 ElementUI 中实现 Table 单元格合并
  • 萤石云实际视频实时接入(生产环境)
  • Node.js全局对象详解:console、process与核心功能
  • [ARM][架构] 01.ARMv7 特权等级与核心寄存器
  • 代码随想录算法训练营第60期第四十八天打卡
  • 开源 FcDesigner 表单设计器组件事件详解
  • 算法打卡第七天
  • 水磨沟区做网站/自动点击器怎么用
  • 做外贸需要用什么网站/北京刚刚传来特大消息
  • 什么都不会怎么做网站/seo关键词排名优化系统源码
  • 网页设计师考试报名/网站优化推广seo
  • 在线做图表的网站/磁力搜索引擎不死鸟
  • 成都住房和城乡建设局 网站首页/青岛网站排名公司