在 Firestore 中设置某些规则时遇到问题。所以基本上creatorId都在文档中,我不明白规则是怎么回事。我在规则中对 id 进行了硬编码,如果我执行 `request.auth.uid == 'iv4Lk1148KVBkney3eFdNZPWMC43'; 它就会起作用。它有效。
我真的不知道如何解决这个问题。
match /jobApplications/{applicationId} {
allow read: if request.auth != null && request.auth.uid == resource.data.creatorId;
allow write: if request.auth != null;
}
我正在构建一个 Flutter 应用程序,这是负责从
jobApplications
获取数据的方法。它是无限滚动列表的一部分。
void _loadMoreApplications() async {
final CollectionReference applicationsRef =
FirebaseFirestore.instance.collection('jobApplications');
Query query = applicationsRef.limit(25);
if (lastDocument != null) {
query = query.startAfterDocument(lastDocument!);
setState(() {
isLoadingMoreApplications = true;
});
}
try {
final applicationDocs = await query.get();
if (applicationDocs.docs.isNotEmpty) {
lastDocument = applicationDocs.docs.last;
Set<ApplicationModel> uniqueApplications = applications.toSet();
for (var doc in applicationDocs.docs) {
uniqueApplications.add(ApplicationModel.fromFirestore(doc));
}
applications = uniqueApplications.toList();
setState(() {
showSpinner = false;
});
}
setState(() {
isLoadingMoreApplications = false;
});
} catch (error) {
print('Error fetching applications: $error');
}
}
捕获的打印:
flutter: 获取应用程序时出错:[cloud_firestore/permission-denied] 调用者没有执行指定操作的权限。
您似乎错过了文档部分,其中解释了安全规则不是过滤器,而是它们只是检查代码是否请求了超出允许范围的数据。
您的代码向所有用户请求文档,而规则明确规定它只能向当前用户请求文档。由于代码请求的文档多于允许的文档,因此规则拒绝该操作。
为了满足规则的要求,代码应该只请求当前用户的文档,因此在
where
上附加一个 creatorId
条件。
另请查看其他有关规则不是过滤器的问题,因为这是一个非常常见的错误。