在Angular中,应将用户对象存储在哪里,以便可以在导航设置中引用该对象以获取可用性?

时间:2018-09-28 09:52:24

标签: angular authentication

来自ASP.NET的Angular完全是新的。我有一个正在重写的应用程序,该应用程序具有相当复杂的安全性结构,并且我需要导航组件以不仅反映用户的简单角色,而且反映该角色内的其他特权。寻找有关在何处“存储”该用户对象的帮助,以便我保持对后端服务的最少访问,以获取所有这些详细信息,同时保持代码内的安全性。

对于所有Angular应用程序,我创建了一个AuthService,我希望它执行所有这些功能,然后保存当前登录用户的设置。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:-1)

根据Angular StyleGuide

  

不要将实例实例在CoreModule中的整个应用程序中共享(例如ExceptionService和LoggerService)。

因此,您可以在AuthService中创建一个CoreModule,然后在CoreModule中导入此AppModule。在此AuthService中,您可以实现private BehaviorSubject并将其公开asObservable,类似于以下内容:

import { BehaviorSubject, Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

import { User } from '@app/shared/models/user.model';

@Injectable()
export class AuthService {

  private user: BehaviorSubject<User> = new BehaviorSubject<User>(null);
  user$ = this.user.asObservable();

  constructor(private http: HttpClient) { }

  login(credentials: User) {
    return this.http.post(...)
      .subscribe(user => this.user.next(user));
  }

  ...

}

您可以在subscribe生命周期挂钩方法中简单地将user$ngOnInit,只需在组件中注入AuthService作为依赖项即可访问当前登录的用户。

由于这将是一个Singleton,并且其实例将在整个应用程序中共享,因此您可以在App的任何位置访问它。

您可能还想使用ngx-permissions,它可以帮助您为Angular应用实现基于权限和基于角色的访问控制。