在我的身份验证服务中,我有一个从firebase后端填充的可观察的user
。
我还有一个方法,它接受user对象,如果用户具有传入的角色,则返回一个布尔值。
在我的模板中,我有一些元素,我只想在登录的用户拥有admin
角色时才显示这些元素,例如,作为他们的角色之一列出。我需要它以这样的方式运行,这样我最终可以使用is('contributor'),等等,并且仍然可以得到一个布尔值。
现在,当我尝试测试它时,浏览器挂起并最终崩溃。如果用户的角色与需求匹配,那么我如何设置使div隐藏,直到数据解析?
// authService
this.user = this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges()
} else {
return of(null)
}
})
)
is(role){
let p = Promise
this.user.toPromise().then(resolvedUserData=>{
(_.has(role, resolvedUserData.roles)) ? p.resolve() : p.reject();
})
return p;
}
//template
<div *ngIf="authService.is('admin') | async">admin content here</div>
发布于 2018-12-17 01:14:45
您的函数返回一个promise,而异步管道需要一个observable。
// AuthService
isAdmin = false;
this.user = this.afAuth.authState.pipe(
switchMap(user => {
if( check if use is admin){
this.isAdmin = true;
}
})
)
//模板
<div *ngIf="authService.isAdmin">admin content here</div>
从安全的角度来看,我不确定这是最好的方法。我会有一些其他类型的验证或令牌。但这种方法回答了您所提供的内容。干杯。
https://stackoverflow.com/questions/53803977
复制相似问题