uni-app中uni-id-users定义read:"doc.status == 0" 返回权限校验未通过,参与权限校验的集合为[uni-id-users,uni-id-roles]

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

uni-app中uni-id-users定义read:“doc.status == 0” 返回权限校验未通过,参与权限校验的集合为[uni-id-users,uni-id-roles]
针对 uni-id-users 中设置了 read 权限:

"permission": {
  "read": "doc.status == 0",
  "create": true,
  "update": true,
  "delete": true
}

读取 user list 的时候响应如下:

{
  "success": true,
  "data": {
    "code": "PERMISSION_ERROR",
    "errCode": "PERMISSION_ERROR",
    "message": "权限校验未通过,参与权限校验的集合:[uni-id-users,uni-id-roles],请参考文档:https://uniapp.dcloud.net.cn/uniCloud/schema.html#handler-permission-error",
    "errMsg": "权限校验未通过,参与权限校验的集合:[uni-id-users,uni-id-roles],请参考文档:https://uniapp.dcloud.net.cn/uniCloud/schema.html#handler-permission-error",
    "systemInfo": []
  },
  "header": {......}
}

uni-id-roles 中的权限:

"permission": {
  "read": true,
  "create": true,
  "update": true,
  "delete": true
}

如果将 uni-id-users 中 permission 设置为 true,就没问题

"permission": {
  "read": true,
  "create": true,
  "update": true,
  "delete": true
}

请问这是为什么?


1 回复

在uni-app中使用uni-id进行权限管理时,遇到uni-id-users定义read: "doc.status == 0"返回权限校验未通过的问题,通常是因为当前用户的权限设置或数据状态不符合预期。这里我们可以通过代码示例来展示如何配置和使用uni-id的权限校验功能。

首先,确保你的uni-app项目已经集成了uni-id,并且正确配置了相关的权限规则。以下是一个基本的配置示例,展示如何在uniCloud云函数中设置uni-id-users的权限规则。

1. 配置权限规则

uniCloud/database/db_init.js文件中,配置数据库权限:

const db = uniCloud.database()

db.collection('your_collection_name').permission('read', {
  rules: [
    {
      action: 'allow',
      resource: {
        field: 'status',
        equals: 0
      },
      condition: {
        uniIdUser: {
          field: '_id',
          match: '$in:uni-id-users'
        }
      }
    }
  ]
})

这里的your_collection_name替换为你的集合名称。这个规则允许status字段等于0的文档被uni-id-users集合中定义的用户读取。

2. 用户权限设置

确保用户的权限集合uni-id-users已经正确设置。这通常在用户注册或管理员后台完成。例如,你可以在用户注册时动态添加用户到特定的权限集合:

const uniID = require('uni-id')

uniID.createUser({
  username: 'testuser',
  password: 'password123',
  extra: {
    // 其他用户信息
  },
  success: function (res) {
    uniID.addToGroup({
      group_id: 'your-group-id', // 替换为你的组ID
      user_id: res.uid,
      success: function () {
        console.log('用户已成功添加到组')
      }
    })
  }
})

3. 读取数据时的权限校验

当你尝试读取数据时,uni-id会自动应用这些权限规则。如果权限校验失败,将返回相应的错误信息。

db.collection('your_collection_name')
  .where({
    status: 0
  })
  .get()
  .then(res => {
    console.log('查询结果:', res.result)
  })
  .catch(err => {
    console.error('查询失败:', err)
  })

如果上述配置和代码无误,但仍然遇到权限校验未通过的问题,请检查以下几点:

  • 确保用户确实在uni-id-users集合中。
  • 确保文档status字段的值确实为0。
  • 检查是否有其他权限规则覆盖了你的设置。
  • 查看云函数日志,获取更详细的错误信息。

通过这些步骤,你应该能够定位并解决权限校验未通过的问题。

回到顶部