【问题标题】:How to implement a feature such that only followers can see post if the post is followers only?如果帖子只是关注者,如何实现只有关注者才能看到帖子的功能?
【发布时间】:2019-10-18 22:58:22
【问题描述】:

我正在尝试在我的博客应用程序中实现一项功能,用户可以在其中发布“仅限关注者”的帖子。如果是追随者,那么只有追随者可以看到帖子,如果不是,那么每个人都可以看到它。目前我提出了一个解决方案,但如果它是在我的数据库的安全规则中执行此操作的有效方式,我不会这样做。我不知道在数据库规则中编写函数。

我尝试通过在我的源代码中添加一条规则来实现此功能,其中包含 if-else 语句。

Future _checkFollowing() async {
    List<DocumentSnapshot> _checkFollow = [];
    Query q = Firestore.instance
        .collection('user')
        .document(ownerId)
        .collection('followers')
        .where('profileId', isEqualTo: uid);

    QuerySnapshot querySnapshot = await q.getDocuments();
    _checkFollow = querySnapshot.documents;
    if (_checkFollow.length == 1) {
      setState(() {
        isFollowing = true;
      });
    } else if (_checkFollow.length == 0) {
      setState(() {
        isFollowing = false;
      });
    }
  }
if (followersOnlyPost) {
   if (isFollowing) {
      return buildPost();
    } else if (!isFollowing) {
      return null;
    }
 } else if (!followersOnlyPost) {
    return buildPost();     
 }

我对数据库中的每个用户都有一个followers 子集合。 一个帖子集合,其中每个帖子都有一个 followers-only 布尔字段。 这就是我创建帖子文档的方式

Firestore.instance.runTransaction((transaction) {
      var reference = Firestore.instance.collection('all_posts');

      reference.add({
        'timestamp': DateTime.now(),
        'likes': {},
        'followersOnly': false,
        'bookmarks': {},
        'likesCount': 0,
        'ownerId': uid,
      }).then((DocumentReference doc) {
        String docId = doc.documentID;
        reference.document(docId).updateData({"postId": docId});});

我的代码执行了我想要的操作,但是对于每个帖子,都会调用函数 _checkFollowing,因此它在每个帖子中都被视为 1 次阅读。 由于提要中的帖子很多,因此会导致大量阅读。

我也想实现块功能,但我还没有做,因为我不知道该怎么做。

【问题讨论】:

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


    【解决方案1】:

    我要做的是在加载应用程序时检查用户在关注谁(如果有互联网连接)并将其存储在 sqlite 数据库中。然后,当它检查帖子是否为“仅限关注者”时,您可以在本地从 sqlite 数据库进行检查,而无需调用数据库。这种方法意味着每次打开应用程序时您只会获得一次数据库调用。

    【讨论】:

    • 感谢您的解决方案,但我想到的另一件事是,如果我加载以下所有内容,如果用户关注其中的许多内容,这也会成为问题,结果也会增加阅读次数。 :(
    • 在我看来,加载所有用户的关注应该只算一次阅读。但我不知道 Firestore 是如何工作的,所以可能并非如此,它可能会将每个用户都算作一次数据库调用。
    猜你喜欢
    • 2023-01-19
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多