@sdgroup14

Есть сервис Аутификации. Как сделать его общим для всего проекта?

всем привет! Пишу проект на Angular 2+. На данный момент пользуюсь последней версией. Раньше делал легкие проекты и теперь понимаю что делал костыльно. Суть вопроса... Есть к примеру "новостной" портал у него есть блоки header и content. Без Аутификации допустим автор не может отредактировать свою новость и в хедере светится кнопка зайти.
когда залогинился появился карандашик и в хедере его ииконка... Неужели нужно в каждом компоненте из 100 в конструкторе добавлять этот сервис который проверяет мой JWT токен и потом только в onInit чекать что ему показывать.... такоже вопрос по ролям... Неужели нельзя как то внести его 1 раз на весь проект чтоб каждый компонент понимал что нужно изначально проверить токент а потом выдавать по результату? Я ж понимаю аналогичная схема и по локазилации?
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
StivinKing
@StivinKing
У вас будет AuthGuard, который будет контролировать доступ к разделам и можно написать директиву, которая будет контролировать показ UI на странице. Пусть директива будет называться, к примеру, "hasAuth" и будет иметь такое содержимое:
@Directive({ selector: '[hasAuth]' })
export class HasAuthDirective implements OnInit {
  constructor(private _viewContainer: ViewContainerRef, private _template: TemplateRef<any>) { }

  ngOnInit(): void {
    this._checkAuth(/*ваше определение аутентификации типа boolean*/);
  }

  private _checkAuth(isAuth: boolean): void {
    if (isAuth) {
      this._viewContainer.createEmbeddedView(this._template);
    } else {
      this._viewContainer.clear();
    }
  }
}

И в шаблоне, где нужно показать/скрыть кнопку или другой UI в зависимости от того, прошел ли пользователей аутентификацию, просто добавляем созданную нами директиву:
<button *hasAuth>Редактировать статью</button>

Набросал мини пример - ссылка

Что касается "локализации". Так же нет ничего сложного. Рекомендую использовать ngx-translate. В принципе, там есть вся необходимая информация по вопросам "как этим пользоваться".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы