#10628·parse-server

对于受角色写入或删除影响的所有用户,LiveQuery 角色缓存不会被置为无效

作者: AdrianCurtin创建于 2026年8月13日更新于 2026年8月13日

新问题核对表

QQ 问题描述

`LiveQuery Captain. clearCachedRoles( user)' 使 LiveQuery 服务器对单个用户的缓存认证无效,并且只有在用户在请求中出现时才无效 。 两个呼叫网站都通过代理用户:

  • rc/RestWrite.js'(runDatabase Operation'、角色创建和更新)
  • rc/rest.js' (del',删除角色,添加于#10620)

这就留下了两起角色更改不会使LiveQuery缓存角色关闭失效的案件:

  1. ** 请求中没有用户。 ** 清晰的CachedRoles ' 在用户 ' 病态时提前返回,因此主密钥写出或删除完全不公布。 用主键管理角色,从管理工具或云码,是常见的情况.
  2. ** 演员以外的用户。 ** ParseCloudCodePublisher#onClearCachedRoles'出版一个单行的用户Id },而`ParseLiveQueryServer # ClearCachedRoles(用户Id)'为该用户解决了‘会议'一行。 添加或去除一个成员,或删除其他角色继承的角色,会改变对从未被指名的用户的有效关闭.

爆炸半径是受限的,因此,这是单独提交的,而不是安全报告。 REST 和 认证方已经正确 : “ cache Captain. role. clear () ” 是全局的, 并且为每个用户放弃缓存的关闭 。 ParseLiveQueryServer''''AuthCache'是一个以cacheTimeout'为界的LRU,因此,僵化的条目自行失效。 间隙仅限于LiveQuery事件交付,从僵化的角色关闭决定到TTL起落.

这早于#10620,并同样适用于角色写作路径,自#8026推出"clearCachedRoles"后,角色写作路径就一直如此.

  • 复制步骤
  1. 启动 LiveQuery 的剖析服务器,允许使用 ACL 授予的类读取 `作用:Editors' 。
  2. 作为 " 开发者 " 成员的用户登录并订阅该类查询。
  3. 使用主密钥,删除 " Editors " 角色(或删除该角色的订阅用户)。
  4. 保存匹配订阅对象。

实际结果

订阅者继续接收无法读取的对象的事件,直至其“自动卡切”条目在“卡切时通”后失效。 使用主密钥,根本没有发布“清晰的卡切”信息。 通过会话认证请求,只有代理用户会话无效,因此该角色的其他成员会看到相同的僵化.

预期成果

一个角色写出或删除会让每个有效角色关闭改变的会话的LiveQuery auth缓存失效,包括当请求没有带用户时.

环境

这是来自 10620 的代码路径报告,不是运行时错误报告,所以客户端 . . . . . . .

内容来源: parse-community/parse-server