JFa*_*thi 8 firebase firebase-security google-cloud-firestore
我有点卡在这里,因为没有办法调试这些规则.我很感激以下规则的帮助.
我想访问:
/modules/module-id/sessions/session-id/parts/
与null第一部分的比较hasCompletedPrerequisiteSession()效果很好,第二部分没有!
该路径/modules/moduleId/sessions/sessionId/prerequisite指向参考字段.
service cloud.firestore {
match /databases/{database}/documents {
function hasCompletedPrerequisiteSession(moduleId,sessionId) {
// this part works well
return getPrerequisiteSession(moduleId,sessionId) == null ||
// !!! this part does not work !!!
hasCompleted(getPrerequisiteSession(moduleId,sessionId).id);
}
function getPrerequisiteSession(moduleId,sessionId) {
return get(/databases/$(database)/documents/modules/$(moduleId)/sessions/$(sessionId)).data.prerequisite;
}
function hasCompleted(sessionId) {
return exists(/databases/$(database)/documents/progress/$(request.auth.uid)/sessions/$(sessionId));
}
match /modules/{moduleId}/sessions/{sessionId}/parts/{partId} {
allow read: if hasCompletedPrerequisiteSession(moduleId,sessionId);
}
}
}
Run Code Online (Sandbox Code Playgroud)
(如果我将会话ID存储为字符串而不是对会话的引用,它可以正常工作.)
编辑
问题
modules/moduleId/owner指向该类型的字段reference.获取引用文档的id的正确方法是什么?get(../modules/moduleId).data.owner.data.id或者get(../modules/moduleId).data.owner还是其他什么东西?来自 Firebase 支持:
看来在您的用例中,您希望从参考字段的值(先决条件)获取文档名称(sessionId),不幸的是,Firestore安全规则目前不支持这一点。我建议您仅将 sessionId 作为字符串存储在您的prerequisite字段中,或者您也可以为sessionId. 请记住,exists() 和 get() 函数仅允许您检查文档是否存在,或在给定路径检索文档。
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |