uni-app中uni-id-users定义read:"doc.status == 0" 返回权限校验未通过,参与权限校验的集合为[uni-id-users,uni-id-roles]
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
}
请问这是为什么?
在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。 - 检查是否有其他权限规则覆盖了你的设置。
- 查看云函数日志,获取更详细的错误信息。
通过这些步骤,你应该能够定位并解决权限校验未通过的问题。