【发布时间】: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