首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振/修复:读写权限有问题

颤振/修复:读写权限有问题
EN

Stack Overflow用户
提问于 2022-07-30 05:48:10
回答 1查看 78关注 0票数 0

我试图使它,使我的应用程序只显示用户的任务,只有该用户已经创建。我有一个帐户创建系统,我不希望其他帐户能够查看和编辑任务,已创建的其他人。我已经设置了规则并更改了我的流,但是在创建任务和查看任务时,它给了我一个拒绝权限的错误。我在这里做错什么了吗?

这就是我要犯的错误..。

name);limitType=LIMIT_TO_FIRST) W/

( 7671):(24.2.1) Firestore:侦听查询(target=Query(target=Query/myemail@gmail.com,由target=Query发出的订单失败):状态{code=PERMISSION_DENIED,description=Missing或权限不足,cause=null}

这是我的任务代码..。请注意我的_TasksState类的顶部,其中声明了权限

代码语言:javascript
复制
class Tasks extends StatefulWidget {
  const Tasks({Key? key}) : super(key: key);

  @override
  State<Tasks> createState() => _TasksState();
}

String uid = FirebaseAuth.instance.currentUser!.uid;

class _TasksState extends State<Tasks> {
  final Stream<QuerySnapshot> _stream =
      FirebaseFirestore.instance.collection('tasks').where("userId", isEqualTo: uid).snapshots();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.grey[50],
        body: SingleChildScrollView(
          child: Container(
            width: MediaQuery.of(context).size.width,
            padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 20),
            child: Column(
              children: [
                const SizedBox(height: 20),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: const [
                    Text(
                        'Tasks',
                        style: TextStyle(
                            fontSize: 30,
                            fontWeight: FontWeight.w500),
                      ),
                  ],
                ),
                const SizedBox(height: 20),
                StreamBuilder(
                    stream: _stream,
                    builder: (context, AsyncSnapshot snapshot) {
                      if (!snapshot.hasData) {
                        return const Text(
                          'There are no saved Tasks, click "Add Task" to get started!',
                          style: TextStyle(
                              fontSize: 20, fontWeight: FontWeight.w500),
                          textAlign: TextAlign.center,
                        );
                      }
                      return ListView.builder(
                        physics: const ScrollPhysics(parent: NeverScrollableScrollPhysics()),
                          scrollDirection: Axis.vertical,
                          shrinkWrap: true,
                          itemCount: snapshot.data.docs.length,
                          itemBuilder: (context, index) {
                            IconData iconDataValue;
                            Color iconColorValue;
                            Map<String, dynamic> data =
                                snapshot.data.docs[index].data()
                                    as Map<String, dynamic>;
                                    switch(data['category']) {
                                      case 'Order' : 
                                      iconDataValue = Icons.monetization_on;
                                      iconColorValue = Colors.white;
                                      break;
                                      case 'Build' : 
                                      iconDataValue = Icons.handyman;
                                      iconColorValue = Colors.white;
                                      break;
                                      case 'Pickup' : 
                                      iconDataValue = Icons.arrow_circle_up;
                                      iconColorValue = Colors.white;
                                      break;
                                      case 'Cleanup' : 
                                      iconDataValue = Icons.cleaning_services;
                                      iconColorValue = Colors.white;
                                      break;
                                      case 'Repair' : 
                                      iconDataValue = Icons.build;
                                      iconColorValue = Colors.white;
                                      break;
                                      default:
                                      iconDataValue = Icons.question_mark;
                                      iconColorValue = Colors.white;
                                    }
                            return InkWell(
                              onTap: () {
                                Navigator.push(context, MaterialPageRoute(builder: (context) => ViewTaskData(data: data, id:snapshot.data.docs[index].id)));
                              },
                              child: TaskCard(
                                title: data['title'] == '' ? 'No Title' : data['title'],
                                iconColor: iconColorValue,
                                iconData: iconDataValue,
                              ),
                            );
                          });
                    }),
                const SizedBox(height: 20),
                const TaskActionButton()
              ],
            ),
          ),
        ));
  }
}

这些是我宣布的规则..。如果你想要消防控制台的截图,请告诉我。

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /tasks/{taskId} {
      allow read, write: if request.auth.uid == resource.data.userId;
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-07-30 12:55:42

试试这个许可..。

代码语言:javascript
复制
 rules_version = '2';
   service cloud.firestore {
   match /databases/{database}/documents {
   match /{document=**} {
   allow read, write: if true;
     }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73173178

复制
相关文章

相似问题

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