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



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

与看起来是所有 Angular 应用程序一样,我创建了一个 AuthService,我希望它执行所有这些功能,然后保留当前登录用户的设置。

感谢您提供的任何帮助!

根据Angular StyleGuide

在 CoreModule 中放置一个单例服务,其实例将在整个应用程序中共享(例如 ExceptionService 和 LoggerService(。

因此,您可以在CoreModule中创建AuthService,然后将此CoreModule导入到AppModule中。在此AuthService中,您可以实现一个privateBehaviorSubject并将其公开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));
}
...
}

您只需subscribengOnInit生命周期挂钩方法中的user$,方法是将AuthService作为依赖项注入组件,以访问当前登录的用户。

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

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

最新更新