快速显示所有 Firebase 用户的帖子

2024-03-15

我需要使用 firebase 作为后端创建一个 UISearchController 。我目前在 firebase 中有两个用户。一名用户发布了一篇帖子,另一名用户发布了四篇帖子。我希望能够搜索我的数据库中所有书籍的标题(共有五本书)。但是,到目前为止,我只能搜索当前登录用户上传的书籍。下面是我的数据库和我的代码当前的屏幕截图。

databaseRef.child("posts").child(userID!).observe(.childAdded, with: { (snapshot) in


    let key = snapshot.key
    let snapshot = snapshot.value as? NSDictionary
    snapshot?.setValue(key, forKey: "uid")

    if(key == self.loggedUser?.uid)
    {
        print("same as logged in user")
    }
    else
    {
    self.usersArray.append(snapshot)
         self.followUsersTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
    }



    }) { (error) in
        print(error.localizedDescription)
    }

}

您将需要一个名为 Books 的不同父节点:-

现在你的 JSON 是这样的:-

posts : {
    userID1 : {
       BOOK_11_ID : {.....}
       };

    userID2 : {
       BOOK_21_ID : {.....},
       BOOK_22_ID : {.....},
       BOOK_23_ID : {.....},
       BOOK_24_ID : {.....},
       }
 }

您必须将数据库 JSON 结构修改为:-

 posts : {

   Users_books :{
    userID1 : {
       BOOK_11 : true  // Value 'true' means that this user 
                      // has subscribed or bought this book or whatever
       };

    userID2 : {
       BOOK_21 : true,
       BOOK_22 : true,
       BOOK_23 : true,
       BOOK_24 : true,
       }
      },

   Books:{
       BOOK_11_ID : {/Book details/};
       BOOK_21_ID : {/Book details/};
       BOOK_22_ID : {/Book details/};
       BOOK_23_ID : {/Book details/};
       BOOK_24_ID : {/Book details/};
       }

 }

修改“图书”部分的安全规则,使所有经过身份验证的用户都可以看到。

{
 "rules" :{

  "Users_books" : {

     ".write" : "auth != null && auth.uid === $uid",  // Will allow only the user to make any change within its node and no-one else
     ".read": "auth != null && auth.uid === $uid"

       },
  "Books" : {
      ".write" : "auth != null",  // Will allow all the users that are authenticated to your app to access every books detail.
      ".read" : "auth != null"
       }
     } 
  }

现在你要做的是:-

1) 如果是创建书籍的用户;然后将书籍详细信息存储在books下的父节点'Books'中uid并在 users 节点中将 book_ID 的值设置为 true。

2)如果数据库都是后端的,即你输入的;每当用户订阅或购买一本书时,只需获取该书的 uid 并在该用户的部分将其设置为 true 。

PS:始终扇出您的数据库;从中搜索起来要容易得多。尽管我很确定您在不久的将来会想要存储用户的一些个人详细信息,因此只需创建另一个节点即可。命名它'Users',安全规则将与'用户图书'及以下'Users'父节点附加每个用户的详细信息及其uid作为他们的钥匙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速显示所有 Firebase 用户的帖子 的相关文章

随机推荐

  • 如何读取txt文件并将其保存在html中的javascript数组中

    有很多解决方案 但我在 html 网页上的 javascript 中发现很少或根本没有 我的html 文件所在的位置有一个名为sample txt 的数据文件 我的目标是将 txt 文件加载到数组中 该数组可用于创建表格并显示在 html
  • 如何将Entity框架中的DbSet转换为ObjectQuery

    我正在使用 Code First 方法 并遇到一个需要将 DbSet 转换为 ObjectQuery 的问题 这就是我为转换所做的 ObjectContext objectContext IObjectContextAdapter db O
  • 在 C# 中为 0x80000000 == 2147483648,但在 VB.NET 中则不然

    In C 0x80000000 2147483648 outputs True 在 VB NET 中 H80000000 2147483648 outputs False 这怎么可能 这与语言背后的历史有关 C 始终支持无符号整数 您使用的
  • DB2 时间戳选择语句

    我正在尝试运行一个简单的查询 该查询根据时间戳获取数据 如下所示 SELECT FROM
  • C#:无法以编程方式填充 DataGridView

    我没有使用设计器 而是尝试以编程方式填充我放在 Winform 上的 DataGridView 当我查看调试器下的表格时 它具有正确的列和行数 问题是网格在我的表单上显示为空的灰色框 当我通过 VS 2008 Designer 将网格绑定到
  • 禁用 WPF 标签加速键(缺少文本下划线)

    我正在设置 ContentLabel 的值包含下划线的字符串 第一个下划线被解释为加速键 不更改底层字符串 通过替换所有 with 有没有办法禁用标签的加速器 如果您使用 TextBlock 作为标签的内容 则其文本将不会吸收下划线
  • 循环和递归之间的实际区别是什么

    我目前正在使用 PHP 工作 因此这个示例将使用 PHP 但问题适用于多种语言 我正在和我的一个朋友一起做这个项目 和往常一样 我们遇到了一个大问题 现在我们俩都回家了 无法解决问题 那天晚上我们都找到了解决办法 只是我用了循环来解决问题
  • Swift - 在带有可选参数的泛型函数中以 Nil 作为参数

    我正在尝试创建一个可以接受可选参数的通用函数 这是我到目前为止所拥有的 func somethingGeneric
  • 健全性检查:作为主键浮动?

    我正在使用旧的 sql server 2000 数据库 将其中的一些信息与我正在构建的新应用程序混合在一起 我注意到几个表中的一些主键是浮点数而不是任何类型的整数 它们不是外键并且都是唯一的 我想不出有任何理由让任何人想要让他们的唯一主键
  • 使用 Python 和 Selenium 抓取图形上的悬停

    我正在尝试从中抓取数据http fuelinsights gasbuddy com Charts http fuelinsights gasbuddy com Charts使用Python和Selenium 困难的部分是 只有当鼠标悬停在折
  • Spotify 应用程序请求授权

    我正在尝试使用以下代码从 Spotify 获取 访问令牌 var encoded btoa client id client secret function myOnClick console log clikced ajax url ht
  • iTextSharp 许可 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们想在我们的一个项目中使用 iTextSharp DLL 来提取 PDF 文本 但我第二次考虑将其发布
  • iOS9 上的 Admob 和插页式广告

    今天我注册了 adMob 并开始在我的应用程序中处理 adMob 广告 第一个是游戏 带有视图控制器 我想在游戏结束后立即显示插页式广告 所以我想在游戏结束后立即加载插页式广告游戏结束加载的视图 此视图仅在游戏结束后才可访问 并且游戏持续一
  • 对数组中的对象执行块操作并在全部完成时完成

    我有一个对象数组 我想对其执行块操作 我不确定执行此操作的最佳方法 我正在做类似下面代码的事情 但我认为这不是最佳实践 进行此类操作的最佳方法是什么 void performBlockOnAllObjects NSArray objects
  • 类不符合RequestRetrier协议

    我一直在将我的项目迁移到 swift3 并一直在努力让 Alamofire RequestRetrier 协议正常工作 我遵循 Alamofire 4 0 迁移指南 https github com Alamofire Alamofire
  • 使用 @OneToOne 和 @OneToMany 时如何使 Hibernate OUTER JOIN

    假设我有一张名为employee与领域employee id name and supervisor id and employee supervisor与领域supervisor id and name 存在外键关系employee an
  • Docker:如何对 docker Push 进行身份验证?

    嗨 我正在尝试docker push docker simple httpserver docker push myregistry simplehttpserver latest The push refers to a reposito
  • 活动管理日期过滤器日期格式自定义

    是否有简单的方法可以更改 ActiveAdmin 日期过滤器显示格式的默认 ISO 格式 yyyy mm dd 您可以向日期选择器提供额外的选项 而不是覆盖 js 如下所示 f input my date as datepicker dat
  • 禁用 Android WebView WebRTC

    Fresh Cromium WebView 支持 WebRTC 但我想禁用它 Chrome 应用程序可以允许在 Chrome 中执行此操作 因此这似乎并非不可能 我进行了很多研究 但没有找到合适的解决方案 任何帮助 将不胜感激 更新 仍未解
  • 快速显示所有 Firebase 用户的帖子

    我需要使用 firebase 作为后端创建一个 UISearchController 我目前在 firebase 中有两个用户 一名用户发布了一篇帖子 另一名用户发布了四篇帖子 我希望能够搜索我的数据库中所有书籍的标题 共有五本书 但是 到