gpt4 book ai didi

firebase - 使用 Firestore 规则中的引用数据类型

转载 作者:行者123 更新时间:2023-12-02 20:02:45 26 4
gpt4 key购买 nike

我想定义一个规则,允许用户仅更新自己的项目,而管理员则更新所有项目。

作为 uid_of_logged_in_administrator,我应该能够更新 items/item__1items/item__2 - 这有效。

作为uid_of_logged_in_user,我应该被允许更新items/item__1,但不能更新items/item__2 - 但事实并非如此。

显然,问题是我不知道规则中的数据类型 [Cloud Firestore 引用] 代表什么。

我已经阅读了有关规则的文档并尝试了不同的事情。

if request.auth.uid == resource.data.owner                           | false
if request.auth.uid == resource.data.owner.id | false
if request.auth.uid == resource.data.owner.__id__ | false
if resource.data.owner is string | false
if resource.data.owner is path | true
if resource.data.owner == path('users/uid_of_logged_in_user') | false
if request.auth.uid == resource.data.owner[6] | false

所以看来resource.data.owner是一个路径。

但是我如何获取此引用的 ID?

我创建此引用的原因之一是所有者属性可以是一个盒子或一个用户。例如。 {所有者:'/users/uid_of_logged_in_user'}{所有者:'/boxes/box__1'}

我当然可以将用户 uid 作为字符串的属性添加到项目中,而不是作为引用。但随后我需要为盒子或用户作为所有者拥有两个不同的属性。

我的规则

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

function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "admin";
}
function isAuth() {
return request.auth.uid != null;
}

match /users/{uid} {
allow read: if isAuth();
allow write: if isAdmin();
}

match /items/{umbId} {
allow read: if isAuth();
// THIS IS THE ISSUE. IT DOESENT WORK.
allow update: if request.auth.uid == resource.data.owner
allow write: if isAdmin();
}
}
}

我的数据库结构如下

users 
# documentid(uid_of_logged_in_user)
- name: 'My name' // string
- address: 'My address' // string
# documentid(uid_of_logged_in_administrator)
- name: 'Another one' // string
- address: 'His address' // string
- role: 'admin'

items
# documentid(item__1)
- owner: 'users/uid_of_logged_in_user' // reference
- name: 'The first item' // string
# documentid(item__2)
- owner: 'users/uid_of_logged_in_administrator' // reference
- name: 'The first item' // string

boxes
# documentid(box__1)
- name: 'First Box' // string
documentid(box__2)
- name: 'Second box' // string

最佳答案

if resource.data.owner ==/databases/$(database)/documents/users/$(uid_of_logged_in_user) 应该有效。

关于firebase - 使用 Firestore 规则中的引用数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48340047/

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