Я понимаю работу аутентификации на основе JWT, но я стараюсь понять правильный подход к созданию управления доступом на основе роли в angular2.
Может кто-нибудь, пожалуйста, предоставит вам подход к этой проблеме или некоторые полезные ссылки.
Я понимаю работу аутентификации на основе JWT, но я стараюсь понять правильный подход к созданию управления доступом на основе роли в angular2.
Может кто-нибудь, пожалуйста, предоставит вам подход к этой проблеме или некоторые полезные ссылки.
В приложении Angular вы можете выполнить следующие действия: 1 - Убедитесь, что AuthGuard возвращает false, если пользователь не имеет права доступа к определенному компоненту. 2 - Скрыть пункты меню, которые пользователь не должен видеть.
Помните, что реальная авторизация, действующая на сервере, в angular2, вы просто используете уровень представления.
Вот один из возможных способов:
Вы добавляете индивидуальные требования к токену JWT. Это может быть примерно так:
{ "пользователь": "JohnDoe", "роли": [ "admin", "manager", "whatever" ] }
В приложении Angular вы создаете AuthService, где вы декодируете токен JWT и сохраняете извлеченное требование в переменной, а в localStorage
Вы можете создать навигационную службу, которая будет хранить данные о меню и ролях, необходимых для доступа к определенному компоненту в объекте или массиве. Это может быть что-то вроде этого (псевдокод):
const menuItems = [ { "name":"Dashboard", "routerLink":"/dashboard", "rolesRequired":["user"] }, { "name":"ControlPanel", "routerLink":"/cp", "rolesRequired":["admin"] }, ..... constructor(private authService:AuthService){} getMenu(){ return this.menuItems.filter( element => { return this.authService.user.role.haveElement(element.rolesRequired) } }
В компоненте меню вы можете использовать навигационную службу для извлечения списка разрешенных пунктов меню.
Вы можете использовать ту же навигационную службу в AuthGuard.
Следующая ссылка может помочь:
Вы можете использовать модуль Ng2Permission для управления доступом на основе роли и разрешений для ваших приложений angular 2.0.
Существует также ngx-permissions библиотека ключевое различие этой библиотеки, что она удалит объект из DOM, а не скрывает его через css. Включите его в проект
@NgModule({
imports: [
NgxPermissionsModule.forRoot()
],
})
export class AppModule { }
Определить роль
NgxRolesService
.addRole('ROLE_NAME', ['permissionNameA', 'permissionNameB'])
NgxRolesService.addRole('Guest', () => {
return this.sessionService.checkSession().toPromise();
});
NgxRolesService.addRole('Guest', () => {
return true;
});
Использовать в шаблоне
<div *ngxPermissionsOnly="['ADMIN', 'GUEST']">
<div>You can see this text congrats</div>
</div>
Для лучшей документации см. wiki