目录

项目场景:在审批端来审批活动信息时候点击审批通过但是并无响应

问题描述

原因分析

解决方案

题外话 


项目场景:在审批端来审批活动信息时候点击审批通过但是并无响应

这个小程序是集用户端和审批端为一体的小程序,用户可以在用户端提交活动申请以及提交预约老师的申请,但是用户提交之后遇到了审批人员无法驳回或者通过该申请(后台用的是小程序的云开发功能)


问题描述

 审批预约的人员点进了预约详情后“审批通过”了该项目,本应该出现在“已通过”栏目的预约信息,却还是留在了“待审批”的页面。

之后发现在数据库里,这条预约数据的“state”状态并没有改变(我这里state的值0是指的待审批,1指的是已通过,2指的是已驳回)

 这部分的代码也是没有很大问题的(如果点击了“审批通过”按钮则会执行pass函数,“驳回”则会执行reject函数)

let eventid = ''
const DB = wx.cloud.database().collection("appointment")
Page({
       data:{
              list:[],
              id:"",
              rejectReason:""
       },
       onLoad(option){
              console.log("列表所携带的值",option)
              var id = option.id
              this.setData({
                     id :option.id
              })
              
              DB
              .doc(id)
              .get()
              .then(res=>{
                     this.setData({
                            list:res.data
                     })
                     
              })
              .catch(res=>{
                     console.log("活动详情页请求失败",res)
              })
       },
       pass(){
              let that = this;
              wx.showLoading({
                title: '正在上传中……',
                mask:true
              })
              DB.doc(this.data.id)
              .update({ // updata指 插入数据库中的userlist表;
                //将我们获取到的新值代入
                  data: { 
                         state:1
                  },
                }).then(res => {
                  console.log("上传成功", res)
                  wx.showToast({
                    title: '成功',
                  })
                  wx.navigateTo({
                    url: '../appointmentApproval/appointmentApproval',
                  })
                  .then(()=>{
                     wx.startPullDownRefresh()
                  })
                })
                .catch(err => {
                  console.log("上传失败", err)
                  wx.showToast({
                    title: '失败',
                    icon:"none"
                  })
                })
              

       },
       
       reject(){
              let that = this;
              wx.showLoading({
                title: '正在上传中……',
                mask:true
              })
              DB.doc(this.data.id)
              .update({ // updata指 插入数据库中的userlist表;
                //将我们获取到的新值代入
                  data: { 
                         state:2,
                         rejectReason: this.data.rejectReason
                  },
                }).then(res => {
                  console.log("上传成功", res)
                  wx.showToast({
                    title: '成功',
                  })
                  wx.navigateTo({
                    url: '../appointmentApproval/appointmentApproval',
                  })
                  .then(()=>{
                     wx.startPullDownRefresh()
                  })
                })
                .catch(err => {
                  console.log("上传失败", err)
                  wx.showToast({
                    title: '失败',
                    icon:"none"
                  })
                })
              

       },
       rejectReason(event){
              console.log("这是驳回输入框里的信息",event.detail.value)
              this.setData({
                     rejectReason:event.detail.value
              })
       }
})

原因分析

数据库的权限问题!!!!

如果打开云开发的数据库中的数据权限可以看到有很多模式供你选择。每一种都是对应一些特定的场景使用。这里有两个关键的词语他们分别是是“所有用户”和“创建者”。

需要着重注意的是创建者是指创建这条记录的人,即_openid所对应的那一个人

 因此,申请者是创建者而审批的人是属于所有用户的那一部分,故审批者没有权利去修改这条记录里的内容(state的值)来达到完成审批通过或者驳回的目的。

此外,在小白刚开始做项目的时候遇到的问题有的也跟这个数据库权限相关的。例如:在后台帮别人创建了账号和密码,但是别人输入了账号密码后不能正常登录,需要把这个用户的openid字段和其值写入这条记录才能正常登录!这样造成了很多不便


解决方案

将你的数据权限设置成自定义安全规则,并将里面的代码改成如下,这样的一个操作就是来达到所有用户可读可写的目的!


题外话 

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐