jsdevel
@jsdevel
Java разработчик. Хороший парень, наверное.

Angular 5 JWT где хранить роли пользователя? Каким образом проверять?

Необходимо разграничить доступ к представлению (кнопка админ панель). Так чтобы роли не хранить в localStorage как во многих туториалах.
  • Вопрос задан
  • 649 просмотров
Решения вопроса 1
StivinKing
@StivinKing
Есть несколько вариантов. Но какой бы способ вы не использовали, всё что на фронте, может передать под себя, и открыть те же недоступные кнопки, которые не подходят под роль. Поэтому всегда нужно делать проверку на бэке

Из вариантов, это хранение в куках, глобально в сервисе, в нужных местах делать запрос на back и получать разрешение или запрет. Самое главное еще не передавать никогда список ролей. Никто не должен знать какие роли существуют.

Можно написать директиву, вроде:
Директива по отображению элементов в интерфейсе в зависимости от роли
@Directive({ selector: '[hasRole]' })
export class HasRoleDirective implements OnInit {
  @Input() hasRole: string[] | string | undefined;

  constructor(private _viewContainer: ViewContainerRef,
              private _template: TemplateRef<any>) {
  }

  ngOnInit(): void {
    this._checkRoles(GlobalService.userRole);
  }

  private _checkRoles(userRole: string): void {
    if (!this.hasRole || this.hasRole === 'undefined' || this.hasRole.indexOf(userRole) !== -1) {
      this._viewContainer.createEmbeddedView(this._template);
    } else {
      this._viewContainer.clear();
    }
  }
}


Можете переписать данную директиву под себя. То есть при открытии страницы делать запрос на backend получать разрешение/запрет на просмотр элементов и с помощью этой директивы, расставленной на определенные элементы, контролировать отображение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
храни в сторе (ngrx-store), при старте приложения у тебя читается JWT токен и: в самом токене список ролей или делаешь запрос и потом всё это пушишь в стор
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы