我在 Firestore 中有一个“团队”系列。团队文档将包含一个team_users
地图字段,userID: true
如果他们是该团队的一部分。
team_users
我在服务中有一个查询,该查询返回并显示所有团队文档,其中登录的用户 ID 与字段中的 ID 匹配。
getTeamsList(user_id: string) {
this.teamsCollection = this.afs.collection<any>(`teams`, ref => ref.where(`team_users.${user_id}`, "==", true))
this.teams = this.teamsCollection.snapshotChanges().pipe(
map(actions => actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
}))
).pipe(shareReplay());
}
我需要实现的是执行以下操作的路由守卫:
- 防止用户访问他们不属于/曾经属于的团队。例如,如果用户在 中时有一个文档的书签
Team A
,但后来离开了,他们应该无法访问此路由,而是应该重定向回/teams
- 如果用户不属于任何团队(集合查询不产生任何结果),则无法从
/teams
列表 url访问路径
注意:一个用户可以是多个团队的一部分。如果用户是 A、B 和 C 组的成员,并且在 A 组中拥有页面的书签,但后来离开了,则路由守卫应阻止他们访问属于 A 组的任何页面,但仍允许访问B 组和 C 组页面。
这是否意味着:
- 我的应用程序中的每个 URL 都需要这个保护吗?
- 我的应用程序中的每个 URL 都需要包含团队 ID?
任何帮助将不胜感激。