gpt4 book ai didi

firebase - 具有引用字段的Firestore安全规则

转载 作者:行者123 更新时间:2023-12-04 04:24:06 25 4
gpt4 key购买 nike

我有点卡在这里,因为没有办法调试这些规则。感谢您提供以下规则的帮助。

我要访问:
/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);
}
}
}

enter image description here

(如果我将 session ID存储为字符串而不是对 session 的引用,则它可以正常工作。)

编辑

问题
  • 安全规则中的引用字段。 假定modules/moduleId/owner指向reference类型的字段。获取引用文档ID的正确方法是什么? get(../modules/moduleId).data.owner.data.idget(../modules/moduleId).data.owner或其他?
  • 最佳答案

    从Firebase支持:

    看来,在您的用例中,您想从引用字段的值(前提条件)中获取文档名称(sessionId),不幸的是,Firestore安全规则目前不支持。我建议您仅将sessionId作为String存储在prerequisite字段上,或者也可以为sessionId添加String字段。请记住,exists()和get()函数仅允许您检查文档是否存在,或在给定路径下检索文档。

    关于firebase - 具有引用字段的Firestore安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com