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

前言

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

使用方法

1.写权限验证js

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

javascript 复制代码
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中注册为全局变量(函数)

贴上代码

javascript 复制代码
	app.config.globalProperties.$auth=auth
	app.config.globalProperties.$authAll=authAll

3.页面中直接使用

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

html 复制代码
<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:*:*'

html 复制代码
<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。

相关推荐
suncentwl3 小时前
论答题pk小程序软件版权的
小程序·答题小程序·答题pk·知识竞赛·答题pk软件
weixin_hcs22014 小时前
小程序打通美团核销:解锁到店综合业态私域密码,赋能6000+门店破局增长
小程序·美团团购·美团新平台·java接入美团团购·快速接入美团团购
weixin_177297220697 小时前
盲盒抽谷机小程序系统开发:解锁盲盒新玩法,开启潮玩社交新时代
小程序
Rudon滨海渔村8 小时前
【懒人教程】如何让uniapp项目在PC大屏中显示移动端的效果 - 统一uniapp项目的PC、平板、手机的样式
uni-app
Hashan10 小时前
微信小程序:实现证件OCR识别
前端·vue.js·微信小程序
2501_9159184111 小时前
iOS 文件管理全流程实战,从开发调试到数据迁移
android·ios·小程序·https·uni-app·iphone·webview
一念杂记13 小时前
【实战系列3】免费可商用微信商城小程序开发——商品管理和展示
后端·微信小程序·开源
碎像14 小时前
uni-app实战教程 从0到1开发 画图软件 (学会画图)
前端·javascript·css·程序人生·uni-app
小徐_233316 小时前
uni-app 还在手写请求?alova 帮你全搞定!
前端·uni-app·axios
Dignity_呱17 小时前
聊聊小程序的双线程架构
前端·微信小程序·架构