【发布时间】:2021-06-13 11:07:58
【问题描述】:
我正在尝试设置权限,以便具有给定电子邮件地址的用户只能阅读具有匹配 docId 的文档。
这是文档集合:
/cats/a@test.com
/cats/b@test.com
/cats/c@test.com
以下内容在“Rules Playground”中完美运行,但最终在我的 Angular 应用程序中始终没有返回任何内容。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /cats/{catDocId} {
allow read: if request.auth.token.email.lower() == catDocId;
allow write: if false;
}
}
}
这是应用程序代码:
myPage.component.ts:
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore } from '@angular/fire/firestore';
import { Observable } from 'rxjs';
// ...
cats: Observable<any[]>;
// ...
ngOnInit(): void {
this.afAuth.authState.subscribe(user => {
this.cats = this.firestore.collection('cats').valueChanges();
});
}
myPage.component.html:
<ul>
<li class="text" *ngFor="let cat of cats | async">
{{cat.name}}, {{cat.color}}, {{cat.favoriteFood}}
</li>
</ul>
有什么想法会出错吗?谢谢。
【问题讨论】:
-
明显问题:您的用户登录了吗?
-
另外,您能分享您的查询吗?确实需要注意的是安全规则不是过滤器,见firebase.google.com/docs/firestore/security/…
-
是的,用户已登录,我已编辑问题以包含 Angular 代码。谢谢
-
看来我正在尝试将规则用作过滤器。有没有一种简单的方法可以根据用户的令牌数据(即他们的电子邮件地址)授予对单个文档的读取权限?
标签: javascript angular google-cloud-firestore firebase-authentication firebase-security