uni-app JQL数据库管理进行了权限验证(DB Schema)
uni-app JQL数据库管理进行了权限验证(DB Schema)
操作步骤:
- 创建opendb-msg表
- 使用jql管理器添加数据
预期结果:
正常添加数据
实际结果:
30205|当前用户为匿名身份
bug描述:
按官方文档,JQL管理器中的代码不受DB Schema的权限控制,
但是开发中想添加测试数据,报 30205|当前用户为匿名身份
好像只能暂时关掉DB Schema的权限设置
4 回复
使用的什么版本的HBuilderX?升级到最新版试试看
忘了写版本,是最新版的alpha(3.4.6)
回复 2***@qq.com: 最新的alpha是3.4.8看一下这个版本呢
在 uni-app 中使用 JQL(JavaScript Query Language)进行数据库操作时,权限验证是一个非常重要的环节。通过 DB Schema(数据库模式),你可以定义数据库的结构和权限规则,确保只有经过授权的用户才能执行特定的操作。
1. 什么是 DB Schema?
DB Schema 是数据库的结构定义,它描述了数据库中的集合(表)、字段、索引等信息。同时,DB Schema 还可以定义每个集合的权限规则,控制哪些用户可以执行增删改查操作。
2. 如何配置 DB Schema?
在 uniCloud 中,你可以通过 schema.json
文件来定义 DB Schema。以下是一个简单的示例:
{
"bsonType": "object",
"required": ["name", "age"],
"properties": {
"name": {
"bsonType": "string",
"title": "姓名",
"minLength": 2,
"maxLength": 10
},
"age": {
"bsonType": "int",
"title": "年龄",
"minimum": 0,
"maximum": 120
}
},
"permission": {
"read": "auth.uid != null", // 只有登录用户才能读取
"create": "auth.uid != null", // 只有登录用户才能创建
"update": "auth.uid == doc._uid", // 只有文档的创建者才能更新
"delete": "auth.uid == doc._uid" // 只有文档的创建者才能删除
}
}
3. 权限规则详解
在 permission
字段中,你可以定义以下权限规则:
- read: 控制谁可以读取数据。
- create: 控制谁可以创建数据。
- update: 控制谁可以更新数据。
- delete: 控制谁可以删除数据。
权限规则可以使用 JavaScript 表达式,常见的变量包括:
auth.uid
: 当前登录用户的 ID。doc
: 当前操作的文档对象。now
: 当前时间戳。
4. 在 JQL 中使用权限验证
在 JQL 查询中,权限验证是自动进行的。你只需要按照 DB Schema 定义的规则进行查询,系统会自动检查用户是否有权限执行该操作。
例如,以下是一个简单的 JQL 查询示例:
const db = uniCloud.database();
db.collection('users')
.where({
age: db.command.gt(18)
})
.get()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err);
});