首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有不同位置读写功能的防火墙安全规则

具有不同位置读写功能的防火墙安全规则
EN

Stack Overflow用户
提问于 2018-09-02 10:26:44
回答 1查看 136关注 0票数 0

我的实时数据库模式是这样设计的。

代码语言:javascript
复制
"roles" : {
    "uid-1" : "user",
    "uid-2" : "moderator",
    "uid-3" : "user" // ... and so on
}

"photos" : {
    "uid-1" : {    
        "photo" : "..."
        "date" : "..."
    }
    // ... and so on
}

我的安全规则就是这样定义的。只显示了相关部分。

代码语言:javascript
复制
"photos" : {
    "$key" : {
        ".read" : "auth.uid == $key || root.child('roles/'+auth.uid).val() == 'moderator'",
        ".write" : "auth.uid == $key"
    }
}

从上面的片段中可以清楚地看到,我希望用户能够在“照片”节点下读写自己的密钥。至于版主,我希望他们能够阅读任何用户的数据。

起初,它似乎像预期的那样起作用,但有一个小问题。根据火力基,如果节点上没有指定规则,则它将被视为false。这意味着版主现在可以读取每个用户的数据,但前提是他明确地要求特定的UID。换句话说,阅读photos/<uid>是被允许的,但是作为一个整体,photos/是不允许的。

一个潜在的解决方案是移动read语句,使其成为photos节点的直接子节点。但在那里,我不能为其他用户执行$key

您可能尝试拆分规则并在两个位置进行定义,但这是行不通的,因为根据火基文档,浅层规则将覆盖更深层次的规则。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-02 14:43:30

你似乎有两个要求:

  1. 每个用户都可以读和写自己的照片。
  2. 版主可以阅读所有用户的照片。

它可以在服务器端安全规则中强制执行,如下所示:

代码语言:javascript
复制
"photos" : {
    ".read" : "root.child('roles/'+auth.uid).val() == 'moderator'",
    "$key" : {
        ".read" : "auth.uid == $key",
        ".write" : "auth.uid == $key"
    }
}

版主从/photos获得的权限将传递到每个用户的照片上。不能在较低级别撤销此权限。但是,您肯定可以在较低级别授予用户*额外的**权限,这些规则就是这样做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52136088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档