首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云修复安全规则-(读,写)

云修复安全规则-(读,写)
EN

Stack Overflow用户
提问于 2021-10-25 18:10:36
回答 2查看 226关注 0票数 0

在我的颤振应用程序中,我希望允许一个已签名的用户能够读取他们创建的文档/s(只有在DocumentID与UserID相同的情况下)。问题是documentID是由防火墙自动生成的。当我使用在documentID中签名的UserID显式指定documentID时,用户无法创建多个文档,因为documentID已经存在。请帮帮我..。

结果总是显示以下的快照错误..。

代码语言:javascript
复制
StreamBuilder<QuerySnapshot>(
        stream: FirebaseFirestore.instance.collection('orders').snapshots(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(
              child: CircularProgressIndicator(),
            );
          } else {
            if (snapshot.hasError) {
              return const Center(
                child: Text('Oops, something went wrong...'),
              );
            }
          }

向Firestore添加数据

代码语言:javascript
复制
onPressed: () {
                  var firebaseUser = FirebaseAuth.instance.currentUser;

                  FirebaseFirestore.instance.collection('orders').add({
                    'date': FieldValue.serverTimestamp(),
                    'product': 'Jeans',
                    'total': cart.totalAmount,
                    'uid': firebaseUser!.uid,
                  });
                  cart.clearCart();
                },

显示来自Fi还原的数据

代码语言:javascript
复制
StreamBuilder<QuerySnapshot>(
        stream: FirebaseFirestore.instance.collection('orders').snapshots(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(
              child: CircularProgressIndicator(),
            );
          } else {
            if (snapshot.hasError) {
              return const Center(
                child: Text('Oops, something went wrong...'),
              );
            }
          }

安全规则

EN

回答 2

Stack Overflow用户

发布于 2021-10-25 18:32:24

如果希望用户能够创建多个文档,则不能将其UID用作文档ID --因为文档ID在集合中是唯一的。

常见的方法是使用add()文档来让Firestore生成唯一的文档ID,然后将用户的UID存储在每个文档中的字段中(就像您似乎已经做的那样)。

然后,通过在写规则中调用isOwner助手函数,可以强制用户只编写包含自己的安全规则中的UID的文档:

代码语言:javascript
复制
allow write: if request.auth != null && isOwner();
票数 1
EN

Stack Overflow用户

发布于 2021-10-25 18:38:08

要在数据库中添加数据时获取documentId:

代码语言:javascript
复制
DocumentReference docRef = _firestore.collection("orders").doc();

             await docRef.set({
                'id': docRef.id,
                'date': FieldValue.serverTimestamp(),
                'product': 'Jeans',
                'total': cart.totalAmount,
                'uid': firebaseUser!.uid,
              });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69712859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档