В Angular, где я должен хранить пользовательский объект, чтобы я мог ссылаться на него для доступности в настройках навигации? - PullRequest
0 голосов
/ 28 сентября 2018

Довольно новый для Angular исходящий из ASP.NET.У меня есть приложение, которое я переписываю, которое имеет довольно сложную структуру безопасности, и мне нужны навигационные компоненты, чтобы отражать не только простую роль пользователя, но и дополнительные привилегии в этой роли.Нужна помощь в том, где «хранить» этот пользовательский объект, чтобы я меньше всего обращался к бэкэнд-сервису, чтобы получить все эти данные, сохраняя при этом безопасность в моем коде.

Как и для всех приложений Angular, у меня создан AuthService, который хотел бы выполнить все эти функции, а затем сохранить настройки для текущего пользователя, вошедшего в систему.

Спасибоза любую помощь, которую вы можете оказать!

1 Ответ

0 голосов
/ 28 сентября 2018

Согласно 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...