【问题标题】:Firebase Custom Claims security rules databaseFirebase 自定义声明安全规则数据库
【发布时间】:2021-07-06 12:56:25
【问题描述】:

您好,我想问一下在 firebase 中是否可以添加这样的自定义声明:

 {
    roles:["ROLE_A","ROLE_B"]
 }
 

同时编写正确的实时数据库安全规则,例如:

".read": "auth.token.roles.contains('ROLE_A')

这是我的数据库示例:

"root":{
    "users":{
       "nodeA":{
           
        }
       "nodeB":{
        
        }
     }
  }

当我试图写下我的规则时

同样的事情也适用于类似的东西

【问题讨论】:

  • 这听起来很合理。你试过了吗?
  • 嗨@FrankvanPuffelen,是的,我试过了,但它似乎不起作用,在实时数据库安全规则中管理数组或列表是否存在问题?
  • "但它似乎不起作用" 请在这种情况下编辑您的问题以包含 minimum, complete/standalone code, rules and data that any of us can use to reproduce the problem。没有它,就很难提供帮助。
  • 你是对的,谢谢你的帮助!
  • 您在操场截图中的问题代码中缺少token 属性。我很确定应该是auth.token.customClaims...

标签: firebase-realtime-database firebase-authentication firebase-security


【解决方案1】:

应该可以。请记住,自定义声明的大小限制为 1000 bytes。如果您需要保存到许多可能会破坏您的应用授权逻辑的角色。

我喜欢将自定义声明用于非常基本的角色,例如 isAdmin,其余的则在数据库中。您只能在受保护的后端和可能是云功能的 Firebase 中更改自定义声明。您需要将这些角色保存在数据库中,以便您的前端查看用户拥有或不拥有哪些角色,并将这些角色与用户自定义声明同步。对于有权更改数据的用户,需要保护这些数据。当您已经拥有它时,您还可以使用数据库中的相同数据来编写您的数据库规则。在两个数据库之间同步它们也很容易。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多