uni-app留言板权限校验未通过

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app留言板权限校验未通过

官方视频无法使用于是考虑自己写连表

get_database() {  
    let db = uniCloud.databaseForJQL()  
    let uid = uniCloud.getCurrentUserInfo().uid  
    console.log(uid)  
    let a = db.collection('liuyanban').where({  
        $or: [{  
                state: true  
            },  
            {  
                user_id: uid  
            }  
        ]  
    }).getTemp();  
    let b = db.collection('uni-id-users').field('_id, nickname, avatar_file').  
    getTemp();  
    db.collection(a,b).get()  
}

然后这个是schema

{
    "bsonType": "object",  
    "required": [],  
    "permission": {  
        "read": "doc.state == true || doc.user_id == auth.uid",  
        "create": "auth.uid != null",  
        "update": false,  
        "delete": false  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "text": {  
            "bsonType": "string"  
        },  
        "state": {  
            "bsonType": "bool",  
            "forceDefaultValue":false  
        },  
        "user_id": {  
            "foreignKey": "uni-id-users._id",  
            "bsonType": "string",  
            "forceDefaultValue":{  
                "$env": "uid"  
            }  
        },  
        "uid": {  
            "bsonType": "string",  
            "forceDefaultValue":{  
                "$env": "uid"  
            }  
        }  
    }  
}

read改成true就可以


1 回复

在处理uni-app中的留言板权限校验未通过的问题时,我们首先需要确保权限校验的逻辑正确,并且API请求与后端服务正确对接。以下是一个基于uni-app和Vue.js的示例代码,用于展示如何实现留言板权限校验,并处理未通过的情况。

前端代码(uni-app)

首先,在uni-app项目中,我们假设有一个留言板页面messageBoard.vue,该页面在用户登录后会根据用户的权限显示或隐藏留言板功能。

<template>
  <view>
    <button @click="checkPermission">进入留言板</button>
    <view v-if="hasPermission">
      <!-- 留言板内容 -->
      <text>留言板</text>
      <!-- 其他留言板组件 -->
    </view>
    <view v-else>
      <text>您没有权限访问留言板</text>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      hasPermission: false,
    };
  },
  methods: {
    async checkPermission() {
      try {
        const response = await uni.request({
          url: 'https://your-backend-api.com/checkPermission',
          method: 'POST',
          data: {
            userId: uni.getStorageSync('userId'), // 假设用户ID存储在本地
          },
        });

        if (response.data.success) {
          this.hasPermission = true;
        } else {
          uni.showToast({
            title: '权限校验未通过',
            icon: 'none',
          });
        }
      } catch (error) {
        console.error('请求失败:', error);
        uni.showToast({
          title: '请求失败,请稍后重试',
          icon: 'none',
        });
      }
    },
  },
  onLoad() {
    this.checkPermission();
  },
};
</script>

后端代码(示例,Node.js + Express)

后端APIcheckPermission用于校验用户权限。以下是一个简单的Node.js + Express示例:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/checkPermission', (req, res) => {
  const { userId } = req.body;

  // 假设我们有一个权限列表
  const authorizedUsers = ['user123', 'admin456'];

  if (authorizedUsers.includes(userId)) {
    res.json({ success: true });
  } else {
    res.json({ success: false });
  }
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

总结

上述代码展示了如何在uni-app中实现前端权限校验逻辑,并通过调用后端API来检查用户是否有权限访问留言板。如果权限校验未通过,前端会显示相应的提示信息。后端代码则模拟了一个简单的权限校验API。确保在实际项目中,后端API的实现能够安全、准确地校验用户权限。

回到顶部