【问题标题】:allow write privilege to user if there permission is set to true in firebase如果在firebase中将权限设置为true,则允许对用户具有写权限
【发布时间】:2018-09-21 17:37:31
【问题描述】:

我有一个如下所示的用户节点:

name:    "someone"
isAdmin: true
isDev: true
permissions:
  shots: true

最后,我想授予任何管理员读写任何内容的权限。

但与此同时,我如何检查用户权限然后授予访问权限?

类似这样的:

match /{document=**} {
  allow write: if request.user.permissions.shots == true;
} 

更新:

我已经走得更远了。

allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.permissions.shots == true;

我觉得应该可以,因为下面的内容确实有效:

allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.name == 'someone';

更新:

随着我深入挖掘,下面的方法似乎是正确的方向,但仍然不起作用

allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.permissions2.child('shots').val() == true;

【问题讨论】:

  • 您共享的规则适用于 Cloud Firestore,但您使用 firebase-realtime-database 标记。虽然这两个数据库都是 Firebase 的一部分,但它们完全不同,一个的安全规则不适用于另一个。如果您确实在使用 Firebase 实时数据库,请在此处查看我的回答,了解如何编辑相应的安全规则:stackoverflow.com/a/52129163
  • @FrankvanPuffelen 我很抱歉。我删除了标签,我正在寻找有关 Cloud Firestore 的指导。谢谢
  • @FrankvanPuffelen 很好奇你能否就我的更新提供一些意见

标签: firebase nosql google-cloud-firestore firebase-security


【解决方案1】:

所以,事实证明我做得比原来要难。

如果我只是省略了

== 真

它会起作用的。我以为这是我尝试的第一件事,但是哦,好吧

allow write: if currentUser().permissions.shots || currentUser().isAdmin;

仅供参考,除此之外我还添加了一个功能来干燥它

function currentUser() {
        return get(/databases/$(database)/documents/users/$(request.auth.uid)).data;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 2021-01-19
    • 2017-08-14
    • 2017-12-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多