【发布时间】:2017-11-07 09:31:36
【问题描述】:
在 Firebase Firestore 中,我试图只允许(自定义分配的)管理员写入/更新/删除资源,为此我制定了以下安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /resources {
allow read;
allow write, update, delete: if get(/users/$(request.auth.uid).isAdmin);
}
match /resources/{resource} {
allow read;
allow write, update, delete: if get(/users/$(request.auth.uid).isAdmin);
}
}
}
我正在使用 users 集合中标记为管理员的用户登录:
NfwIQAjfNdS85yDvd5yPVDyMTUj2 是从身份验证窗格获取的 UID:
但是,由于某种原因(更新: 原因已确定;请参阅答案),我在写入 资源 时遇到 PERMISSION_DENIED 错误绝对确定我已使用管理员用户登录后收集。
也许可以从 Firestore 查看请求日志?然后我可以看看request.auth.uid 的样子,以使其与我的集合和规则相匹配。
【问题讨论】:
-
在
rosource中是否需要添加字段isAdmin? -
如果使用云功能,您可以使用自定义声明进行基于角色的访问。 firebase.google.com/docs/auth/admin/custom-claims
标签: firebase google-cloud-firestore admin rules