来自ASP.NET的Angular完全是新的。我有一个正在重写的应用程序,该应用程序具有相当复杂的安全性结构,并且我需要导航组件以不仅反映用户的简单角色,而且反映该角色内的其他特权。寻找有关在何处“存储”该用户对象的帮助,以便我保持对后端服务的最少访问,以获取所有这些详细信息,同时保持代码内的安全性。
对于所有Angular应用程序,我创建了一个AuthService,我希望它执行所有这些功能,然后保存当前登录用户的设置。
感谢您提供的任何帮助!
答案 0 :(得分:-1)
不要将实例实例在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应用实现基于权限和基于角色的访问控制。