Firebase规则权限问题:登录用户执行setDoc遭权限拒绝求助
解决Firebase setDoc权限拒绝问题及基础多角色配置
一、先搞定当前需求:让joethetest@gmail.com能执行setDoc操作
权限报错是因为Firebase规则没给这个账号写权限,直接修改规则就行:
打开Firebase控制台的Firestore规则页面,把规则改成下面这样(记得把your-collection替换成你实际调用setDoc的集合名称):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /your-collection/{document} { // 仅允许指定邮箱的登录用户执行写操作(setDoc属于写操作) allow write: if request.auth != null && request.auth.token.email == "joethetest@gmail.com"; // 读权限按需调整,这里暂时放开所有登录用户可读,也可以限制邮箱 allow read: if request.auth != null; } } }
修改完点击发布,再触发setDoc操作就不会报权限拒绝了。
二、基础多用户角色配置的简单思路
如果后续要加多角色(比如管理员、普通用户),不用搞复杂教程,先做最基础的实现:
- 在Firestore里新建一个
roles集合,每个文档对应一个用户(文档ID用用户的UID更方便),文档结构示例:
{ email: "joethetest@gmail.com", role: "admin" // 自定义角色标识,比如admin、user }
- 修改Firebase规则,通过读取用户的角色文档来判断权限:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 定义一个获取当前用户角色的函数 function getUserRole() { return get(/databases/$(database)/documents/roles/$(request.auth.uid)).data.role; } match /your-collection/{document} { // 允许admin角色的用户写 allow write: if request.auth != null && getUserRole() == "admin"; // 允许所有登录用户读,或者按角色限制 allow read: if request.auth != null; } } }
后续要加新用户或调整角色,直接在roles集合里新增/修改文档就行,不用改规则。
内容的提问来源于stack exchange,提问作者Brandon Scott
相关产品推荐
相关产品推荐

