苦于学习小程序开发时找不到多少有用的博客教程,网上看过很多博客,不是只有几行一笔带过,就是互相都是复制粘贴,甚至全篇复制
微信官方文档
。
本篇博客是另一篇实战项目博客的拓展,将其中踩过的坑单独拿出来做个总结。有兴趣可以去看看那篇:
实际上此功能可以直接由 JavaScript 实现
,如果你要实现的功能复杂,建议不要用本文的方法。
更新了一下代码,发现微信把
getWXContext
接口返回的数据路径变了。
判断用户权限
要判断用户权限,首先得在数据库建立一个集合,比如我这里叫 author,然后在里面添加你想设置成管理员用户的 _openid。
然后使用云函数返回用户的openid,这个云函数实际就是云开发的模板中的 login 函数。
//cloudfuctions/login/login.js
const cloud = require('wx-server-sdk')
// 初始化 cloud
cloud.init({
// API 调用都保持和云函数当前所在环境一致
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = (event, context) => {
console.log(event)
console.log(context)
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
env: wxContext.ENV,
}
}
再用一个函数调用云函数得到用户的openid,与数据库中的id比较判断是否相等,如果相等,就让页面的 data 中定义的判定权限的变量 authority 为 true:
//判断用户权限
authentication: function () {
wx.cloud.callFunction({
name: 'login',
complete: res => {
db.collection('author').get().then(res2 => {
if (res.result.openid === res2.data[0]._openid) {
this.setData({
authority: true
})
}
})
}
})
},
然后我在某个时候调用这个函数,就实现了用户的鉴权。
比如我在页面加载时就调用这个函数:
onLoad: function (options) {
this.authentication();
},
到这里判断用户权限的功能已经实现,如果用户是设置的管理员,那么他使用小程序时 authority 值为 true。
如何让不同权限用户看到不同内容
我们在上面已经得到,管理员的 authority 值为 true,所以我们利用这个值进行判断即可。
比如在 wxml 中我想让一个 button 只有管理员能看见,那么我们用
wx:if = '{
{authority}}'
判断一下用户身份即可。
代码示例:
<button wx:if = '{{authority}}'>只有管理员才能看到这个按钮</button>
这样只有 authority 值为 true 的人这个按钮才会被显示出来,组件的功能也自然普通用户用不了了。其他组件同理,当然你也可以把权限更加细分,原理是一样的。