uni-app 报错:Error 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users]

uni-app 报错:Error 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users]

操作步骤:

  • 注册一个账号,发布文章,退出登录,注册另一个账号

预期结果:

  • 看到第一个账号的文章

实际结果:

  • 报错Error: 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users]

bug描述:

用一个账号发文章,然后切换到其他账号的时候,看不到其他账号发的文章, 报错信息Error: 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users] 这两张表的权限都改成true也没用 quanzi_article.schema.json:

{
  "bsonType": "object",
  "required": ["user_id", "title"],
  "permission": {
    "read": true,
    "create": "auth.uid != null",
    "update": "doc.user_id == auth.uid || 'webmaster' in auth.role",
    "delete": "doc.user_id == auth.uid"
  },
  "properties": {
    "_id": {
      "description": "存储文档 ID(用户 ID),系统自动生成"
    },
    "user_id": {
      "bsonType": "string",
      "description": "文章作者ID, 参考<code>uni-id-users</code> 表",
      "foreignKey": "uni-id-users._id",
      "defaultValue": {
        "$env": "uid"
      }
    },
    "title": {
      "bsonType": "string",
      "title": "标题",
      "description": "标题",
      "label": "标题",
      "trim": "both"
    },
    "description": {
      "bsonType": "string",
      "title": "文章摘要",
      "description": "文章摘要",
      "label": "文章摘要",
      "trim": "both"
    },
    "province": {
      "bsonType": "string",
      "title": "发布省份",
      "description": "发布省份",
      "label": "发布省份",
      "trim": "both"
    },
    "content": {
      "bsonType": "string",
      "title": "文章内容",
      "description": "文章内容",
      "label": "文章内容",
      "trim": "right"
    },
    "article_status": {
      "bsonType": "int",
      "title": "文章状态",
      "description": "文章状态:0 草稿箱 1 已发布",
      "defaultValue": 0,
      "enum": [
        {
          "value": 0,
          "text": "草稿箱"
        },
        {
          "value": 1,
          "text": "已发布"
        }
      ]
    },
    "delState": {
      "bsonType": "bool",
      "title": "是否已被删除",
      "description": "true是被删除了 false或者空代表正常",
      "defaultValue": false
    },
    "view_count": {
      "bsonType": "int",
      "title": "阅读数量",
      "description": "阅读数量",
      "defaultValue": 55,
      "permission": {
        "write": false
      }
    },
    "like_count": {
      "bsonType": "int",
      "description": "喜欢数、点赞数",
      "defaultValue": 0,
      "permission": {
        "write": false
      }
    },
    "comment_count": {
      "bsonType": "int",
      "description": "评论数量",
      "defaultValue": 0,
      "permission": {
        "write": false
      }
    },
    "last_comment_user_id": {
      "bsonType": "string",
      "description": "最后回复用户 id,参考<code>uni-id-users</code> 表",
      "foreignKey": "uni-id-users._id"
    },
    "picurls": {
      "bsonType": "array",
      "title": "封面大图",
      "description": "缩略图地址",
      "label": "封面大图"
    },
    "publish_date": {
      "bsonType": "timestamp",
      "title": "发表时间",
      "description": "发表时间",
      "defaultValue": {
        "$env": "now"
      }
    },
    "publish_ip": {
      "bsonType": "string",
      "title": "发布文章时IP地址",
      "description": "发表时 IP 地址",
      "forceDefaultValue": {
        "$env": "clientIP"
      }
    },
    "last_modify_date": {
      "bsonType": "timestamp",
      "title": "最后修改时间",
      "description": "最后修改时间",
      "defaultValue": {
        "$env": "now"
      }
    },
    "last_modify_ip": {
      "bsonType": "string",
      "description": "最后修改时 IP 地址",
      "forceDefaultValue": {
        "$env": "clientIP"
      }
    }
  },
  "version": "0.0.1"
}

更多关于uni-app 报错:Error 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users]的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

你的第一个账号是admin,第二个是其它角色吗,检查下schema,view_count等字段加了权限,也会导致失去读权限,去掉字段权限试试。

更多关于uni-app 报错:Error 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users]的实战教程也可以访问 https://www.itying.com/category-93-b0.html


都是创建的普通用户,把那些字段权限删掉也不行

试过数据库清空再初始化,也是不行

@DCloud_云服务_MAQ 这个注册完一个用户再注册新用户会出错的bug很多人都遇到了,怎么解决呢

有解决方案吗?? 我也是这个问题 …

有,我的是user表的某个username的权限没改

我解决了,一个把uni-id-users中的password字段类型“password”改为"string",并且加上"permission": { “read”:true, “write”:true }

在 uni-app 开发过程中,如果你遇到了 Error 权限校验未通过,参与权限校验的集合:[quanzi_article,uni-id-users] 的错误提示,通常是因为你在访问云函数或云数据库时,没有通过权限校验。以下是可能的原因和解决方法:

1. 检查云函数或云数据库的权限配置

  • 在 uniCloud 控制台中,检查 quanzi_articleuni-id-users 这两个集合的权限配置。
  • 确保你当前的角色(如 adminuser 等)有访问这些集合的权限。
  • 如果需要,可以临时将权限设置为 所有用户可读所有用户可写 进行测试,但在生产环境中应谨慎设置权限。

2. 检查云函数的调用方式

  • 如果你是通过云函数访问数据库,确保在云函数中正确使用了 uniCloud.database() 方法,并且在调用时传递了正确的 uniIdToken
  • 例如:
    const db = uniCloud.database();
    const res = await db.collection('quanzi_article').get();
    

3. 检查 uni-id 的登录状态

  • 如果你使用了 uni-id 进行用户身份验证,确保用户已经登录并且 uniIdToken 是有效的。
  • 你可以通过 uniCloud.getCurrentUserInfo() 来获取当前用户的信息,确保用户已登录。

4. 检查云函数的权限校验逻辑

  • 如果你在云函数中自定义了权限校验逻辑,确保逻辑正确并且已经处理了所有可能的错误情况。
  • 例如:
    exports.main = async (event, context) => {
      const { uniIdToken } = event;
      const userInfo = await uniCloud.getUserInfo({ uniIdToken });
      if (!userInfo) {
        return {
          code: 403,
          message: '权限校验未通过'
        };
      }
      // 其他业务逻辑
    };
    

5. 检查客户端的调用代码

  • 确保在客户端调用云函数或云数据库时,传递了正确的参数,特别是 uniIdToken
  • 例如:
    uniCloud.callFunction({
      name: 'yourFunctionName',
      data: {
        uniIdToken: uni.getStorageSync('uniIdToken')
      }
    }).then(res => {
      console.log(res);
    }).catch(err => {
      console.error(err);
    });
    

6. 调试和日志

  • 在云函数中添加日志输出,检查每一步的执行情况,确保没有遗漏或错误。
  • 例如:
    console.log('User Info:', userInfo);
回到顶部