NLa*_*Lam 1 firebase-security google-cloud-firestore
我有一个包含两个集合的 Firestore 数据库:用户和锦标赛。用户具有“参与者”角色和“管理员”角色,并由用户文档中的“isParticipant”和“isAdmin”布尔值指示:
/users/{userId}:
isParticipant: true
isAdmin: true
Run Code Online (Sandbox Code Playgroud)
我为这些集合设置了访问规则,如下所示:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow create, read;
allow update: if request.auth.uid == userId;
}
match /tournaments/{tournamentId} {
allow create, read, update: if request.auth.uid != null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我真正想做的是将锦标赛的创建限制为具有“管理员”角色的用户。我已经在代码中这样做了,但希望增加 db 规则的安全性,以防止除管理员用户之外的任何人创建锦标赛。
有没有办法在规则语法中引用不同集合的数据元素?就像是:
match /tournaments/{tournamentId} {
allow create: if resources.users.userId.isAdmin == true;
}
Run Code Online (Sandbox Code Playgroud)
?
提前致谢。
您可以使用以下get函数访问不同集合中的数据:
Run Code Online (Sandbox Code Playgroud)// Allow the user to delete cities if their user document has the // 'admin' field set to 'true' allow delete: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
有关这方面的更多信息,请参阅Firebase 文档中的访问其他文档,这是我获得上述示例的来源。
需要注意的一件事是,这需要阅读额外的文档。如果您想存储的事实,用户是管理员中他们作为一个自定义声明个人资料,你可以从访问它request.auth,而无需额外的读取。例如
allow delete: if request.auth.token.admin == true
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅使用自定义声明控制访问和访问文档中的用户令牌。
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |