firebase - Firebase FireStore 抽象功能不起作用
问题描述
我在 fireStore 中有一个有效的读取规则来检查用户是否在 /accounts/{account} 资源的 users 数组中:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /accounts/{account} {
allow read: if request.auth != null && request.auth.token.email in resource.data.users;
}
}
}
为了简化代码并在其他地方使用函数来检查基于资源 ID 的用户访问,并遵循此链接中的信息:安全规则!| 了解 Cloud Firestore #6 19:25我曾尝试抽象代码:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function hasUserAccess(account){
return request.auth.token.email in get(/databases/$(database)/documents/accounts/$(account)).data.users;
}
match /accounts/{account} {
allow read: if request.auth != null && hasUserAccess(account);
}
}
}
这样当我想交叉引用相关文档的访问时,我可以调用该函数。为什么抽象版本无法工作?根据 youtube 视频,它似乎应该可以正常工作。
解决方案
您将需要使用hasAny()检查帐户的用户列表是否包含传递的电子邮件。
另请注意,您必须在函数中传递request.auth.token.email 。
请使用以下代码查看用户是否存在于您的其他集合的“用户”字段中:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function hasUserAccess(account,email){
return get(/databases/$(database)/documents/accounts/$(account)).data.users.hasAny([email]);
}
match /accounts/{account} {
allow read: if request.auth != null && hasUserAccess(account, request.auth.token.email);
}
}
}
推荐阅读
- java - 在 build.gradle 中添加为依赖项时,让依赖项 jar 自动添加到 STS 项目
- python - 将自定义视觉输出转换为 TensorFlow 对象检测 API 可视化?
- python - Flask WTForms 自定义验证器不起作用
- date - 用日期和月份格式化日期
- python - 为什么我的代码不起作用?我是在 Python3 上使用 pandas 的新手
- reactjs - 实现 useFetch 反应钩子在提交函数中工作
- c# - WPF 使用 DataType 属性切换多个控件模板失败
- c - gtk3 - 使用 GSimpleAction 时保留快捷方式
- python - 玩家运动的python类问题
- javascript - 使用具有相似属性的 Jest.js 测试对象数组的问题