首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据用户角色隐藏内容?

如何根据用户角色隐藏内容?
EN

Stack Overflow用户
提问于 2018-12-17 00:06:40
回答 1查看 290关注 0票数 -1

在我的身份验证服务中,我有一个从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>
EN

回答 1

Stack Overflow用户

发布于 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>

从安全的角度来看,我不确定这是最好的方法。我会有一些其他类型的验证或令牌。但这种方法回答了您所提供的内容。干杯。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53803977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档