来自ASP.NET 的Angular相当新。我有一个正在重写的应用程序,该应用程序具有相当复杂的安全结构,我需要导航组件不仅反映用户的简单角色,而且反映该角色中的其他权限。寻求有关在何处"存储"此用户对象的帮助,以便我保持最少的后端服务访问以获取这些详细信息,同时保持代码的安全性。
与看起来是所有 Angular 应用程序一样,我创建了一个 AuthService,我希望它执行所有这些功能,然后保留当前登录用户的设置。
感谢您提供的任何帮助!
根据Angular StyleGuide:
在 CoreModule 中放置一个单例服务,其实例将在整个应用程序中共享(例如 ExceptionService 和 LoggerService(。
因此,您可以在CoreModule
中创建AuthService
,然后将此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
ngOnInit
生命周期挂钩方法中的user$
,方法是将AuthService
作为依赖项注入组件,以访问当前登录的用户。
由于这将是一个单例,并且其实例将在整个应用程序中共享,因此您可以在应用程序中的任何位置访问它。
您可能还想使用ngx-permissions
来帮助您为 Angular 应用程序实现基于权限和角色的访问控制。