收藏
回答

云开发 读取 不同数据模型 数据,有的可以读取,有的无法读取,权限设置都一样?

云开发 读取 不同数据模型  数据,有的可以读取,有的无法读取,权限设置都一样?

回答关注问题邀请回答
收藏

1 个回答

  • 云开发小助手CloudBase
    云开发小助手CloudBase
    10-15

    在云开发中,读取不同数据模型的数据时遇到权限问题,可能是由于以下几个原因:

    1. 数据库权限设置:
    • 确保所有数据模型的权限设置一致。常见的权限设置有:仅创建者可写,所有人可读
    • 仅创建者可读写
    • 仅管理端可写,所有人可读
    • 仅管理端可读写
    • 如果权限设置为“仅创建者可读写”,则只有创建者可以读取和写入数据,其他用户无法读取。
    1. 数据模型的 _openid 字段:
    • 系统会强制校验 _openid 字段,确保其与当前用户的 openid 匹配。如果数据模型中的记录没有 _openid 字段,或者 _openid 字段与当前用户的 openid 不匹配,则无法读取数据。
    1. 管理员添加的数据:
    • 如果数据是通过控制台由管理员添加的,且没有 _openid 信息,则这部分数据只能由管理员通过控制台进行编辑,而不支持通过客户端进行读取操作。
    1. 权限粒度:
    • 访问权限控制要求只能基于记录的 _openid 字段和用户的 openid,控制粒度较粗、相对不灵活。如果需要更细粒度的权限控制,可能需要考虑其他方案。

    解决方案

    1. 检查权限设置:
    • 确保所有数据模型的权限设置一致,并且符合你的需求。
    • 如果需要更细粒度的权限控制,可以考虑使用云函数进行自定义权限校验。
    1. 确保 _openid 字段匹配:
    • 确保数据模型中的记录有 _openid 字段,并且与当前用户的 openid 匹配。
    1. 管理员数据处理:
    • 如果数据是由管理员通过控制台添加的,确保在客户端进行读取操作时,处理这种情况,避免读取失败。

    示例代码

    // 示例:检查权限并读取数据
    const db = cloud.database();
    const _ = db.command;
    
    // 假设我们要读取的数据模型为 'articles'
    db.collection('articles')
      .where({
        _openid: cloud.getWXContext().OPENID // 确保 _openid 字段与当前用户的 openid 匹配
      })
      .get({
        success: res => {
          console.log(res.data);
        },
        fail: err => {
          console.error(err);
        }
      });
    


    10-15
    有用
    回复
登录 后发表内容