firebase - Firebase:如何防止在 Firestore 中写入特定字段?
问题描述
规则集保护用户的输入,如下所示:
- 只有他或管理员可以读取他的数据
- 只有管理员可以更新用户的权限
- 用户可以更新他的所有数据,除非他设置了权限对象
规则如下所示:
match /users/{userId} {
allow read: if isCurrentUser(userId) || isAdmin();
allow write: if (isCurrentUser(userId) && !isModifyingPermissions()) || isAdmin();
function isModifyingPermissions(){
return request.resource.data['permissions'] != null;
}
}
我被这个isModifiyingPermissions()
功能困住了。如果请求具有permissions
属性值,它会正确拒绝写入。但是,如果未提供任何属性,则规则会崩溃permissions
,说明如下:
Error: simulator.rules line [19], column [15]. Property permissions is undefined on object.
如何写“检查请求资源上的属性的存在”?
解决方案
好的,这是解决方案:
function isModifyingPermissions(){
return request.resource.data.keys().hasAny(["permissions"]);
}
推荐阅读
- d3.js - d3.js v5 - d3.json 在 Windows 上本地读取文件,但不在 linux 上?
- reactjs - Atom - ReactJS 组件编译为 JS 而不是 ES6
- r - 带有ggplot2的多面板图?
- php - 为什么这个 UPDATE 准备好的语句不起作用,但在 SQL db 中使用时起作用
- php - PHP OAuth签名与相同值的邮递员签名不匹配
- javascript - jQuery在jinja2循环中获取点击值
- typescript - 为什么 TypeScript 声称它“无法调用类型缺少调用签名的表达式”?
- html - 如何在手风琴内插入超链接?
- javascript - 我怎样才能延迟 .then 承诺?
- c++ - 从文件中读取直到行尾并为后续行重复该过程