我在学习Angular + Firebase时遇到问题。我有一组用户和一个角色。我正在使用为用户生成的ID存储我的角色数据。这是屏幕截图:
我想使用canActivate函数来管理谁可以编辑哪些数据。您如何检查用户的admin字段是否设置为true?我可以通过以下方式获取用户的角色文档:
this.afs.collection('roles').doc(id).valueChanges()
我可以这样在HTML中显示数据:
*ngIf="roles$ | async as roles"
但是,我想使用它来验证用户是否具有管理员权限。
您将必须使用take(1)
或first()
运算符,仅从firebase流中获取第一个发射。在CanActivate
后卫需要一个完成Observable
:
export interface UserRoles {
admin: boolean;
editor: boolean;
subscriber: boolean;
}
@Injectable({
providedIn: 'root'
})
export class IsAdminGuard implements CanActivate {
constructor(private auth: AngularFireAuth, private afs: AngularFirestore) {}
canActivate(): Observable<boolean> {
return this.auth.user.pipe(
switchMap((user) => !user?.uid
? of(false)
: this.afs.doc<UserRoles>(`roles/${user.uid}`).valueChanges().pipe(
map((roles) => !!(roles?.admin))
)
),
take(1)
);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句