如何从 Firebase 身份验证和数据库授予对特定 UID 的读/写访问权限

亚历克斯

我一直在努力从最近的研究中了解如何实施以向我的系统中的某些用户授予不同的访问级别。我希望能够授予一个用户读取访问权限,另一个用户可以读取/写入引用他们的 uid。需要做哪些工作来实现?

我是否需要重构我的数据库以及我的 JSON 规则是如何构建的?

在此处输入图片说明

在此处输入图片说明

更新 - 实施了新规则和数据库结构

商店 01 的当前数据库参考 -

database = FirebaseDatabase.getInstance().getReference("stores").child("Store 01").child("Task List"); //Find the Task List table in database and making a reference.

将规则结构更新为以下内容

{
"rules": {

"stores": {
        ".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
        ".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
  },

"readUsers": {
        ".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
        ".write": false   
},


"readWriteUsers": {
        ".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
        ".write": false   
}

} }

将数据库结构更新为以下内容

在此处输入图片说明

雷诺塔内克

一种解决方案是让一些特定的数据库节点列出您的用户,如下所示:

{
  "rules": {

    "Store01": {
            ".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
            ".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
      },

    "readUsers": {
            ".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
            ".write": false   
    },


    "readWriteUsers": {
            ".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
            ".write": false   
    }

  }
}

但是,对于您的数据模型,会出现问题,因为您正在创建多个stores作为数据库根节点。每次创建新商店时,您都需要更新安全规则!

您需要在父节点中创建这些商店,例如stores. 因此,使用新节点readUsersreadWriteUsers节点,您的数据库将如下所示:

- task-list-for-managers
   - stores
     - Store01
        - ....  
     - Store02
        - ....    
   - readUsers
     - WV0676TY67TY9: true   //user Id
     - PU8776TIU6543: true   
     - .....
   - readWriteUsers
     - BD563DHDV7669: true   //user Id
     - 87RSBE6383912: true   
     - .....

规则如下:

{
  "rules": {

    "stores": {
            ".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
            ".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
      },

    "readUsers": {
            ".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
            ".write": false   
    },


    "readWriteUsers": {
            ".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
            ".write": false   
    }

  }
}

需要注意的是,作为解释这里,读取和写入规则级联:

如果规则授予对特定路径的读或写权限,那么它还授予对其下所有子节点的访问权限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mongo-如何确定我所连接的用户具有哪些角色?如何为用户分配完全的读写访问权限?

Firebase如何生成Uid?

如何在Firebase中经过身份验证的用户和数据库之间链接?

Firebase数据库规则UID所有访问

firebase身份验证UID是否过期?

如何使用经过身份验证的ID令牌和数据库规则保护Firebase Cloud Function HTTP端点?

Firebase身份验证:编辑UID

限制Firebase数据库和存储对特定组的写访问权限

在Firebase身份验证Xamarin中访问UID时出错

如何仅授予特定用户访问数据库的权限?

如何使用uid从Firebase获取数据

有什么方法可以从Firebase数据库身份验证和Firebase数据库UID中删除匿名用户?

当我获得“ PERMISSION DENIED”时,如何让我的Firebase安全规则允许对我的实时数据库的身份验证访问

如何为Firebase身份验证用户设置自定义用户UID?

如何获得对从VirtualBox运行的第二个操作系统使用的ext4文件系统的读写访问权限(安全)

如何浏览以只读模式具有读写访问权限的网络驱动器?

如何使用Firebase规则授予对所有节点的读/写访问权限?

如何添加读写访问权限而不删除文件夹?

Firebase 数据库和 Firebase 身份验证中的不同 UID

Firebase 数据库的匿名身份验证权限被拒绝

如何从 Firebase 数据库中读取 UID

如何在 Firebase Swift 中访问具有特定 UID 的用户数据?

Firebase 身份验证和数据库

如何在firebase for android中使用身份验证UId从用户节点获取用户信息?

Firebase 的身份验证 UID 是如何生成的?

Firebase 数据库和身份验证中同一用户的 UID 不同

如何通过 UID 从 Firebase 访问用户?

Firebase 身份验证和数据库规则

如何使用 Firestore 数据库和 Firebase 身份验证创建登录方法