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

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。

http://www.xdnf.cn/news/9064.html

相关文章:

  • [服务器初体验] SSH登录成功后,我的新Linux服务器“空空如也”?三件必做的事让它安全又顺手
  • Redis 性能优化:核心技术、技巧与最佳实践
  • 高性能管线式HTTP请求
  • 强制 IntelliJ IDEA 使用 Google Chrome 打开项目
  • 刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB
  • C++ 继承的相关内容 基类和派生类 默认成员函数的区别等问题
  • IBM DB2升级过程
  • Hadoop集群部署
  • 为什么要使用stream流
  • 计算机网络-MPLS VPN应用场景与组网
  • 【Opencv+Yolo】_Day1图像基本处理
  • [Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)
  • [7-2] AD单通道AD多通道 江协科技学习笔记(30个知识点)
  • 免费分享50本web全栈学习电子书
  • Higress MCP Server 安全再升级:API 认证为 AI 连接保驾护航
  • Elasticsearch Synthetic _source
  • leetcode0409. 最长回文串-easy
  • LeetCode百题刷004(哈希表优化两数和问题)
  • 跟着华为去变革 ——读《常变与长青》有感
  • 迈向生物界范围的基因表达分析-转录组综述-文献精读132
  • React 生命周期与 Hook 理解解析
  • 终端没有5G图标-不支持特定NSA频段组合
  • MyBatis深度解析:XML/注解配置与动态SQL编写实战
  • 华为OD机试真题——荒岛求生(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【硬核DIY · 嵌入式AI】ESP32碰上AI——用Arduino在ESP32-S3上实现AI音频分类
  • AutoKeras的模型保存与加载
  • MyBatis 核心组件剖析:架构、协作与源码解读
  • Hadoop容错机制详解
  • 基于 STC89C52 单片机的机动车里程表设计与实现
  • 分布式事务处理方案