uni-app JQL数据库管理进行了权限验证(DB Schema)

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

uni-app JQL数据库管理进行了权限验证(DB Schema)

操作步骤:

  1. 创建opendb-msg表
  2. 使用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);
  });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!