const query = new AV.Query("X");
    query.notEqualTo("r", true);
    query.subscribe({ useMasterKey: true }).then((liveQuery) => {
      console.log("订阅成功");
      liveQuery.on("create", () => {
        const query2 = new AV.Query("X");
        query2.count({ useMasterKey: true }).then((value) => {
          console.log(value);
          this.itemCount = value;
        });
      });
      liveQuery.on("update", () => {
        const query2 = new AV.Query("X");
        query2.count({ useMasterKey: true }).then((value) => {
          console.log(value);
          this.itemCount = value;
        });
      });
    });

想做个控制台,查看统计数据。

X class 的 create 的数据,都是有设置 ACL,结果create时候,一直没收到 create 通知。

尝试了下直接添加无 ACL 的,就可以。
想问下这个如何解决?

奇怪,按说 useMasterKey 会跳过 ACL 检查。

和您确认一下观察到的现象:

  1. 设置 ACL 时,create 收不到, update 能收到?
  2. 不设置 ACL 时,create 和 update 都能收到?

我刚再次测试了下:

  1. 设置 ACL 后,都收不到,ACL设置的是 read/write 都为 role
  2. 都能收到
  3. 我添加和更新数据都是在 LeanCloud 网页控制台完成的,并不是API

你可以尝试下,就这么几行代码,很容易复现的

创建了2个,只收到1个推送
更新了2个,只收到1个推送

5和6数字是打印 count,别在意


非常感谢,我们复现了您反馈的问题,会尽快修复。修复上线后会回复此帖。

问个问题,

我现在想做个控制台,实时显示数据总数。
因为数据都有 ACL,那么需要 master key

实时显示数据需要 live query,但是又必须在 web 上包含 master key

有什么办法能在不暴露 master key 的情况下解决这个问题?

如果控制台只对特定人员开放的话,可以把这些特定人员加到一个角色(role) 里,然后需要使用 livequery 查询的数据的 ACL 里给这个设置 role 读权限。

emmm,就是个变相的 master key 的感觉

但是这样要给所有数据都添加只读的 Role...

又要改代码 weary

另外之前的 master key 不能跳过权限检查的问题,和相关同事讨论过了,一直以来都是这个行为,因为 LiveQuery 设计意图是给客户端用的,所以也就没有加 master key 跳过权限检查的功能。