You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

社交Android应用Firebase规则配置:认证用户仅管理自有帖子

正确的Firebase实时数据库规则配置方案

我来帮你调整Firebase规则,让已认证用户只能创建和删除自己的帖子!先看你现有规则的问题:你写的是questions节点,但你的数据结构是posts,而且规则路径和数据结构不匹配,所以没法正确生效。

结合你的数据结构,这里是符合需求的完整规则:

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": false,
    "posts": {
      "$postId": {
        ".write": "
          // 允许创建自己的帖子:新数据的authorId等于当前用户ID,且字段存在
          (newData.exists() && newData.hasChild('authorId') && newData.child('authorId').val() === auth.uid) ||
          // 允许删除自己的帖子:原有数据的authorId等于当前用户ID
          (!newData.exists() && data.child('authorId').val() === auth.uid)
        "
      }
    }
  }
}

规则细节解释:

  • 全局.read权限:所有已认证用户(auth.uid != null)都能读取posts数据,符合社交应用的内容浏览需求。
  • 全局.write默认禁用:根节点设为".write": false,避免意外开放全局写权限,所有写操作都在子节点做精细化控制。
  • posts节点的写权限逻辑:
    • 创建帖子时:检查新提交的数据必须包含authorId字段,且该字段的值等于当前登录用户的ID,确保用户只能创建属于自己的帖子。
    • 删除帖子时:检查要删除的帖子的原有authorId等于当前用户ID,确保用户只能删除自己发布的内容。

配套代码提示:

确保你的Android应用在创建帖子时,必须将当前用户的uid赋值给authorId字段,否则规则会拒绝写操作。比如可以这样写:

FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
if (currentUser != null) {
    Map<String, Object> postData = new HashMap<>();
    postData.put("authorId", currentUser.getUid());
    // 其他帖子字段...
    
    FirebaseDatabase.getInstance().getReference("posts")
        .push()
        .setValue(postData);
}

内容的提问来源于stack exchange,提问作者user8694101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:28:17