小程序云开发笔记:判断用户权限,不同权限用户看到不同内容

苦于学习小程序开发时找不到多少有用的博客教程,网上看过很多博客,不是只有几行一笔带过,就是互相都是复制粘贴,甚至全篇复制微信官方文档。所以我要把我踩过的坑都记下来,方便自己总结归纳也方便其他人交流学习

本篇博客是另一篇实战项目博客的拓展,将其中踩过的坑单独拿出来做个总结。有兴趣可以去看看那篇:

小程序实战:推文留言板


更新了一下代码,发现微信把 getWXContext 接口返回的数据路径变了。

判断用户权限

要判断用户权限,首先得在数据库建立一个集合,比如我这里叫 author,然后在里面添加你想设置成管理员用户的 _openid。
小程序云开发笔记:判断用户权限,不同权限用户看到不同内容_第1张图片
然后使用云函数返回用户的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}}' 判断一下用户身份即可。

代码示例:

这样只有 authority 值为 true 的人这个按钮才会被显示出来,组件的功能也自然普通用户用不了了。其他组件同理,当然你也可以把权限更加细分,原理是一样的。

你可能感兴趣的:(微信小程序从入门到入坟)