@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. В принципе, там есть вся необходимая информация по вопросам "как этим пользоваться".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
06 окт. 2024, в 12:09
10000 руб./за проект
06 окт. 2024, в 11:26
4000 руб./за проект
06 окт. 2024, в 08:42
20000 руб./за проект