Firestore Rules文件无法编辑保存 触发list权限报错求助
问题根因
抛出FirebaseError: false for 'list' @ L6的直接原因是Firestore安全规则拦截了列表读取请求,和你判断的一致:当前生效的规则里设置的读写有效期截止到2022年6月4日,当前请求时间远超有效期,规则直接返回false拒绝所有操作。
你遇到的两个卡点分别是macOS本地文件权限不足、本地规则与云端控制台规则不同步,按以下步骤逐一解决即可。
1. 修复本地firebase.rules文件无编辑权限问题
macOS下文件无编辑权限是文件归属或权限位配置错误导致,选任意一种方式处理即可:
- 终端命令方式:进入项目根目录(存放firebase.json、firebase.rules的文件夹),执行
sudo chmod 755 firebase.rules,输入当前mac账号开机密码回车即可获得读写权限;如果执行后仍无法编辑,再执行sudo chown 你的Mac登录用户名:staff firebase.rules修改文件归属即可。 - 可视化操作方式:右键点击firebase.rules文件,选择「显示简介」,拉到页面最底部的「共享与权限」板块,将当前登录用户的权限修改为「读与写」,点击板块下方的齿轮图标,选择「应用到包含的项目」保存设置。
2. 修复安全规则过期、本地与云端规则不同步问题
注意:Firebase控制台修改的规则仅云端生效,本地项目内的firebase.rules是本地开发、模拟器读取的规则文件,二者默认不会自动双向同步。
- 打开可编辑的本地firebase.rules文件,修改过期的时间判断逻辑。如果是本地开发调试阶段,可临时放开所有权限方便测试,规则示例:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
- 如果要保留时间有效期校验逻辑,直接将
timestamp.date(2022, 6, 4)替换为未来的日期即可,例如timestamp.date(2025, 12, 31)。 - 规则修改完成后,在项目根目录执行
firebase deploy --only firestore:rules,可将本地规则直接部署到云端,保证两边规则一致,无需重复在控制台修改。 - 如果之前已经在控制台修改好了云端规则,直接执行
firebase firestore:rules:get > firebase.rules,可将云端最新规则拉取到本地覆盖旧文件,省去手动编辑步骤。
3. 验证修复效果
- 先清理可能残留的模拟器后台进程:执行
lsof -ti:8080 | xargs kill -9杀掉占用Firestore模拟器默认8080端口的旧进程,避免旧进程持续加载过期规则。 - 重新启动Firestore模拟器和应用,触发数据读取操作验证。
- 如果仍报错,可打开模拟器默认管理地址(localhost:4000),进入Firestore规则板块,确认当前模拟器加载的生效规则已经是修改后的版本,排除加载错目录下旧规则文件的问题。
内容的提问来源于stack exchange,提问作者Robgit28
相关产品推荐
相关产品推荐

