Geo*_*242 9 firebase firebase-security google-cloud-firestore
我试图将安全规则建立在对另一个对象的引用上.
我有一组用户和角色集合.用户对象具有名为"role"的字段,该字段是对roles集合中特定文档的引用.
users
id
name
role <-- reference to particular role
roles
id
name
isSuperUser
Run Code Online (Sandbox Code Playgroud)
这里的目标是允许具有特定角色的用户(isSuperUser == true的角色)编辑任何其他角色或其子集合;
以下是我原本认为可行的规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /roles/{roleId=**} {
function isSuperUser() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role.isSuperuser == true;
}
allow read: if request.auth.uid != null;
allow write: if isSuperUser();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经确认了以下作品,但它并没有那么有用......
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role != null;
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法来完成角色基础安全,我很满意.
缺乏任何调试工具使这非常令人沮丧.
小智 0
您是否尝试过将通配符移动到嵌套路径?
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth.uid == userId;
match /{role=**} {
allow read: if request.auth.uid != null;
allow write: if isSuperUser();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |