Согласно 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 и его экземплярбудет использоваться в любом месте приложения, у вас будет доступ к нему в любом месте вашего приложения.
Возможно, вы также захотите использовать ngx-permissions
, который поможет вам реализовать разрешениеи контроль доступа на основе ролей для вашего приложения Angular.