firebase - 允许更新嵌套字段的 Firestore 安全规则
问题描述
我有一个结构文件
name: "blablabla"
members:
123: true
456: true
用户可以自行添加members
docRef.update(FieldPath.of("members", myUid), true);
如何编写安全规则来允许这样做?
我试过了
allow update: if is_valid(request.resource.data);
function is_valid(data) {
return data.keys() == ['members']
&& data.members.keys() == [request.auth.uid]
&& data.members[request.auth.uid] == true;
}
但我明白了PERMISSION_DENIED: Missing or insufficient permissions.
(但是在安全规则模拟器中允许访问)
解决方案
我想出了一个使用removedKeys的条件。从理论上讲,这应该可以正常工作。
allow update: if is_valid(request.resource.data);
function is_valid(data) {
return data.keys() == ['members']
&& data.members.keys() == [request.auth.uid]
&& afterData().members.diff(resource.data.members).removedKeys().size() == 0;
}
function afterData() {
return getAfter(/databases/$(database)/documents).data;
}
推荐阅读
- django - 在 Elasticsearch DSL DRF 上搜索嵌套字段
- go - Kubernetes 中的 NSQ 集群
- javascript - 如何为箭头函数内的逻辑正确创建单元测试
- python - 撤消python中的标记化
- java - 类型“JavaCompile”属性“options.compilerArgumentProviders.apt$0.name”缺少输入或输出注释。升级到 Gradle 7 后出错
- css - 如何仅使用 CSS 更改特定 SVG 路径的颜色?
- amazon-redshift - 从 parquet 文件将具有默认值的数据加载到 Redshift
- elasticsearch - Elasticsearch Painless 获取基于 Doc 值的动态参数
- javascript - WebStorm 的流行插件
- r - 当更多图层添加到传单地图时,表格消失