我试图使它,使我的应用程序只显示用户的任务,只有该用户已经创建。我有一个帐户创建系统,我不希望其他帐户能够查看和编辑任务,已创建的其他人。我已经设置了规则并更改了我的流,但是在创建任务和查看任务时,它给了我一个拒绝权限的错误。我在这里做错什么了吗?
这就是我要犯的错误..。
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类的顶部,其中声明了权限
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()
],
),
),
));
}
}
这些是我宣布的规则..。如果你想要消防控制台的截图,请告诉我。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /tasks/{taskId} {
allow read, write: if request.auth.uid == resource.data.userId;
}
}
}发布于 2022-07-30 12:55:42
试试这个许可..。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}https://stackoverflow.com/questions/73173178
复制相似问题