- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我会使用关键字做一个搜索表单,我可以用更古老的@angular/fire 版本来做,但不能用这个。
总是同样的错误:
FirebaseError : missing or insufficient permissions
我试图在我的 Angular 应用程序中实现一个 collectionGroup 新函数,但它显示了上面的错误。
然后我尝试创建一个 firebase 函数来返回我的 collectionGroup 但我不能重新使用该对象,因为它不是 @angular/fire,它纯粹是 firebase,对吗?
在我的组件中:
import {
collectionData,
collectionGroup,
DocumentData,
Firestore,
query,
where,
} from '@angular/fire/firestore';
search() {
if (this.searchForm.value.search.length) {
let substances = collectionGroup(this.afStore, 'substance');
// ERROR FirebaseError: Missing or insufficient permissions.
let query$ = query(
substances,
where('keywordsName', 'array-contains', this.searchForm.value.search)
);
let res = collectionData(query$);
let res$ = res.pipe(
map((families: DocumentData[]) => {
families.forEach((family: DocumentData) => {
family['color'] = this.riskReduction.generateRandomColor();
});
return families;
})
);
this.riskReduction.setSubstances(res$);
} else {
this.riskReduction.setSubstances(this.riskReduction.getSubstances());
}
}
编辑:否则我尝试使用该功能:
/**
* ANCHOR: Search a substance
*/
export const searchSubstance = functions.https.onCall(async (data, context) => {
try {
const ref = admin.firestore().collectionGroup('substance');
return <BasicResponse>{
status: 'success',
data: { substances: ref.get() },
};
} catch (e) {
console.log(e);
return <BasicResponse>{ status: 'error', message: e };
}
});
谢谢你的帮助
最佳答案
错误:
PERMISSION_DENIED:权限缺失或不足
意味着这个异常被抛出是因为 Firebase 服务器拒绝了操作,这可以通过更改 Cloud Firestore Security Rules 来解决。您可以尝试以下规则(仅用于测试):
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
建议仅将这些规则用于测试目的,因为任何拥有您的项目 ID 的人都可以读取或写入。您可以实现多种安全措施,这里是 excellent article由 Alex Mamo(社区成员)提供,您可以使用它来实现其他几个更安全的安全规则。
第一次更新
由于我们正在从 collection group 中检索结果由集合组成,你需要使用recursive wildcard {name=**}
当使用递归通配符语法时,通配符变量将包含整个匹配路径段,即使文档位于深度嵌套的子集合中。例如,上面列出的规则将匹配位于 /cities/SF/landmarks/coit_tower
的文档,文档变量的值将是 SF/landmarks/coit_tower
.
在安全规则的版本 2 中,递归通配符匹配零个或多个路径项。 match/cities/{city}/{document=**}
匹配任何子集合中的文档和 cities
集合中的文档。
您必须通过添加 rules_version = '2' 来选择加入版本 2;在您的安全规则的顶部:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the cities collection as well as any document
// in a subcollection.
match /cities/{city}/{document=**} {
allow read, write: if <condition>;
}
}
}
每个匹配语句最多可以有一个递归通配符,但在版本 2 中,您可以将此通配符放在匹配语句中的任何位置。例如:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the songs collection group
match /{path=**}/songs/{song} {
allow read, write: if <condition>;
}
}
}
我们可以通过实现 Firebase Admin SDK 来完全避免这个错误, 这个will bypass the security rules完全。
我也找到这个github theard这解释了如何通过执行以下操作避免出现此错误:
关于angular - 如何在@angular/fire 7+ 中使用 collectionGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71980743/
我想在 RecyclerView.ViewHolder 中使用 collectionGroup() 来查询 FirebaseFirestore 上的子集合,但收到一条错误消息: 'collection
如何从 Cloud Firestore 中的每个 CollectionGroup 查询最新文档? 该组中每个集合只有一份文档,是最新的! 最佳答案 Just one document from eac
我的 Firestore 数据库目前是这样设置的: 组有成员(用户列表),我想查询并找到特定用户的所有组。我发现 collectionGroup 查询应该是解决方案,这是我的查询代码。 let db
我在查询 1 个集合中的所有数据时遇到问题 User-> UidUser-> InfoUser (POST (Collection), name, age ...) 然后,我使用下面的代码来获取 co
希望你一切都好。我正在尝试将文本从 Firestore 中的文档添加到 TextView 。有人告诉我不能通过集合组中的 id 查询文档,因此我使用 documentID 创建了一个字段“id”并对其
我有这个云函数: import pLimit from "p-limit"; const syncNotificationsAvatar = async ( userId: string, c
我正在尝试构建一个集合组查询。它适用于 iOS swift 环境。我的机器上运行着最新的 Xcode、Swift、firebase 和 firestore。 当我尝试创建集合组查询时,编译器不提供 c
我会使用关键字做一个搜索表单,我可以用更古老的@angular/fire 版本来做,但不能用这个。 总是同样的错误: FirebaseError : missing or insufficient p
我正在开发一个使用 collectionGroups 的 Firestore 数据库。 所讨论的 collectionGroup 是“Fights”的集合。 创建新战斗时,我想在云函数中使用 onCr
对于我在 Flutter 中构建的应用程序,我试图从 Firestore 的不同日期检索登录用户的保留时间段列表。我到了可以在给定日期检索保留时间段的地步(通过对这一天进行硬编码并将其传递给 futu
我是一名优秀的程序员,十分优秀!