Den*_*nko 7 firebase firebase-security google-cloud-firestore
我有以下 firestore 数据库(简化版)
groups
group1
role=guest
group2
role=user
group3
role=moderator
users
user1
group=group1
user2
group=group2
items
item1
item2
Run Code Online (Sandbox Code Playgroud)
假设我只想允许用户读取/items数据。这是我的方法:
service cloud.firestore {
match /databases/{database}/documents {
function getUser(id) {
return get(/databases/$(database)/documents/users/$(id)).data
}
function getGroup(id) {
return get(/databases/$(database)/documents/groups/$(id)).data
}
function getRole(id) {
return get(/databases/$(database)/documents/roles/$(id)).data
}
match /items/{document=**} {
allow read: if getRole(getGroup(getUser(request.auth.id).group).role) == 'user'
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。看起来不可能在 Firestore 规则中进行嵌套调用。我getGroup()用硬编码的 id进行了测试,它工作正常:
allow read: if getGroup('<userGroupId>') == 'user'
Run Code Online (Sandbox Code Playgroud)
这也有效:
allow read: if getUser(request.auth.uid).group == '<userGroupId>'
Run Code Online (Sandbox Code Playgroud)
但它在这个更复杂的规则上失败了:
allow read: if getGroup(getUser(request.auth.uid).group) == 'user'
Run Code Online (Sandbox Code Playgroud)
有没有可能让它发挥作用?如果没有,还有其他方法可以做到这一点吗?
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |