当前位置: 首页 > 知识库问答 >
问题:

访问Firestore规则中的父文档字段

司空俊雄
2023-03-14

每个食谱文档包含三个内容。一个名为name的字段,其中存储菜谱的名称;一个名为creatoruid的字段,其中存储创建者uid的request.auth.uid,以及一个名为changitions的子集合,其中包含带有一些随机字段的文档。

service cloud.firestore {
  match /databases/{database}/documents {

    function isSignedIn() {
      return request.auth != null;
    }

    match /ListOfRecipes/{recipe} {
        allow read, create: if isSignedIn();
        allow update, delete: if resource.data.creatorUID == request.auth.uid;

        match /{list=**} {
            allow read: if isSignedIn();
            // Should return true if recipe.creatorUID has same value as request.auth.uid
            allow write: if recipe.creatorUID == request.auth.uid;
        }
    }
  }
}

问题是,使用这些规则只能创建菜谱文档。子集合及其文档不会创建,因为db表示

FirebaseError:[code=permission-denied]:缺少权限或权限不足。FirebaseError:缺少权限或权限不足。

共有1个答案

皮献
2023-03-14

规则不是级联的,所以您需要对由规则捕获的文档执行所需的检查。

一般来说,{x=**}规则通常是错误的,并且=**的用法只适用于非常特定的用例。

根据您的问题,我假设您的数据模式如下所示:

/ListofRecipes/{recipe_document}/List/{list_document}
service cloud.firestore {
  match /databases/{database}/documents {

    function isSignedIn() {
      return request.auth != null;
    }

    match /ListOfRecipes/{recipe} {
        allow read, create: if isSignedIn();
        allow update, delete: if resource.data.creatorUID == request.auth.uid;

        function recipeData() {
            return get(/databases/$(database)/documents/ListOfRecipes/$(recipe)).data
        }

        match /List/{list} {
            allow read: if isSignedIn();
            allow write: if recipeData().creatorUID == request.auth.uid;
        }
    }
  }
}
 类似资料:
  • 假设我有一个集合,其中包含子集合。餐厅权限设置在餐厅文档中,如下所示: 餐馆 任何有权访问餐厅的人也可以访问它的任何子集合,包括子集合。这是安全规则: 安全规则 查询餐厅列表可以这样完成,而且效果很好: 查询餐厅 现在如何查询子集合?我知道Firestore需要根据查询推断权限,而不查看底层数据。从逻辑上讲,这应该是可能的,因为任何可以访问的人也可以访问子集合。但是我如何组合这个子集合查询,以便F

  • 我正在用Flutter开发一个应用程序。我在Firestore上有一个结构为:users/(UserID)/collection/document的数据库,这里UserID是创建(UserID)文档的用户的唯一uid。代码用于获取用户的uid is 其中user是FireBaseUser的实例。我试图设置这样的规则,即只有当request.auth.uid与(UserID)文档id匹配时,只有用户

  • 我有一个用于Express/Mongo健康跟踪应用程序的后端API。 每个用户都有一个数组,子文档包含一个值、一个单位和记录的日期。如果未指定单元,则默认为。 每个用户还有一个defaultUnit字段,可以为该用户指定默认单位。如果该用户在未指定单位的情况下发布称重输入,则称重输入应使用用户的默认单位(如果存在),否则默认为。 该逻辑的正确位置在哪里? 我可以在我的WeighInsControl

  • 所以我现在的规则是这样的。 我的问题是,即使在写到子集合时,它是否会准确地检查用户是否在group1->doc->subcollection->doc-'members'中,或者在这种情况下,它是否会签入group1->doc->subcollection->doc-'members'? 因为members列表只在groups集合中,而不在子集合中,所以不希望出现第二种情况。

  • 我是一个初学者,我的消防库数据库有一个包含文档的集合,每个文档都有一个子集合,没有任何其他字段。我找不到一种方法来访问空文档的 ID,并使用 SDK 获取与文档关联的子集合。我可以在控制台上执行此操作,但我必须做太多事情,并且现在也无法对我的应用程序进行更改,因此我需要使用SDK。请建议我一些访问它们的方法,如控制台。

  • 在云火烧-最佳实践留档第一行写道: 每秒钟更新一个文档的次数不应超过一次。如果您更新文档的速度过快,那么您的应用程序将遇到争用,包括更高的延迟、超时和其他错误。 我有一个这样的数据库结构: 我的应用程序管理一个储物柜清单,人们可以登记入住 我的希望是,由于储物柜文件在一个子集合中,我可以同时读/写多个储物柜。我担心它们被视为一个文档(存储文档)的一部分,我一次只能读/写一个储物柜。