Firestore 安全规则:检查 Firestore 文档中的字段值以验证 read/write 操作
Firestore security rules: Check for a field value from a firestore document to validate read/write operations
我想允许 read/write 仅在以下情况下对文档进行操作:
- 有一个有效的帐户
- 文档的 ID 与帐户的 uid 匹配
- 帐户的电子邮件已验证
和
- 帐户在另一个包含 uid 列表及其状态的文档中声明为已批准,如下所示:
我设法写了 3/4 安全规则,但我正在努力写最后一个,如下所示:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isVerified(uid) {
return get(/db-dev/user-status/$(uid)) == "verified"
}
match /{document=**} {
allow read, write: if get(/users/$(request.auth.uid)).data.admin == true;
}
match /db-dev/users/verified/{userId} {
allow read,write: if request.auth != null && request.auth.uid == userId && request.auth.token.email_verified == true && isVerified(request.auth.uid);
}
}
}
理想情况下,我想获取该特定 uid 的值并检查它是否经过验证。有人可以帮我修改我的 isVerified
函数吗?
当我删除 isVerified
时它工作正常但是当我包含 isVerified
时我得到一个错误:Error running simulation — The path "/users/XXXXXXXXXXXXXXXXXXXXXXXXXX" is improperly formatted. Paths should start with "/databases/$(database)/documents/"
理想情况下,我想检查 db-dev/user-status
中是否存在值为“已验证”的 uid,并据此进行处理。
数据库结构:
根据用户的要求,此处的文档结构:
内部用户,我有3个文件:
- 已验证
- 待定
- 拒绝
在所有这三个文件中,我都有其 id 是用户 uid 的文档,后面是他们的详细信息:
您收到的错误是由于 Firebase 规则模拟器中存在的问题。有一些 Whosebug 的答案,例如,this where it is said that the issue is within the Simulator itself. It has also been recorded by google in the Issue tracker,您可以遵循。
至于解决方法,您可以尝试在您的应用程序中部署和测试规则。
我想允许 read/write 仅在以下情况下对文档进行操作:
- 有一个有效的帐户
- 文档的 ID 与帐户的 uid 匹配
- 帐户的电子邮件已验证
和
- 帐户在另一个包含 uid 列表及其状态的文档中声明为已批准,如下所示:
我设法写了 3/4 安全规则,但我正在努力写最后一个,如下所示:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isVerified(uid) {
return get(/db-dev/user-status/$(uid)) == "verified"
}
match /{document=**} {
allow read, write: if get(/users/$(request.auth.uid)).data.admin == true;
}
match /db-dev/users/verified/{userId} {
allow read,write: if request.auth != null && request.auth.uid == userId && request.auth.token.email_verified == true && isVerified(request.auth.uid);
}
}
}
理想情况下,我想获取该特定 uid 的值并检查它是否经过验证。有人可以帮我修改我的 isVerified
函数吗?
当我删除 isVerified
时它工作正常但是当我包含 isVerified
时我得到一个错误:Error running simulation — The path "/users/XXXXXXXXXXXXXXXXXXXXXXXXXX" is improperly formatted. Paths should start with "/databases/$(database)/documents/"
理想情况下,我想检查 db-dev/user-status
中是否存在值为“已验证”的 uid,并据此进行处理。
数据库结构:
根据用户的要求,此处的文档结构:
内部用户,我有3个文件:
- 已验证
- 待定
- 拒绝
在所有这三个文件中,我都有其 id 是用户 uid 的文档,后面是他们的详细信息:
您收到的错误是由于 Firebase 规则模拟器中存在的问题。有一些 Whosebug 的答案,例如,this where it is said that the issue is within the Simulator itself. It has also been recorded by google in the Issue tracker,您可以遵循。
至于解决方法,您可以尝试在您的应用程序中部署和测试规则。