4. Segurança

O Cat UI possui um Guardião próprio, onde já integra com o fluxo de autenticação também nativo, seja utilizando JWT ou OpenID.

Uso

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CatAuthGuard } from '@catrx/ui';
import { PageExampleComponent } from './page-example.component';

const routes: Routes = [
  { path: '', component: PageExampleComponent, canActivate: [CatAuthGuard] },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule],
})
export class PageFormRoutingModule {}

Politicas

Visando rotas mais profundas e que precisam também ter a permissão validada (como rotas de edição de dados), foi criado o sistema de políticas que já está acoplado ao Guardião.

Sempre que quiser proteger uma rota, utilize o Guardião, porém, o mesmo irá por padrão validar apenas se o usuário encontra-se autenticado e se a rota acessada encontra-se liberada no menu, caso contrário, ele irá validar nas políticas (se a mesma possui permissão), caso não tenha políticas configuradas ou a rota não esteja liberada, a mesma será recusada.

Uso das políticas

O local de implantação recomendado é após a autenticação, junto do fornecimento das configurações menu.

app.service.ts
import { Injectable } from '@angular/core';
import { AppConfigMenu, AppNotification, CatAppDecodedToken, CatRoutePolice } from '@catrx/ui';
import { Observable } from 'rxjs/internal/Observable';

@Injectable({ providedIn: 'any' })
export class AppService {
  ...
  
  public getMenu(decodedToken: CatAppDecodedToken) {
    this.buildPolices(decodedToken);
    ...
  }
  
  private buildPolices(decodedToken: CatAppDecodedToken) {
    CatRoutePolice.police = (path: string) => {
      return (
        decodedToken &&
        !!['/components/toolbar/'].find(
          (validPath) => path.indexOf(validPath) >= 0
        )
      );
    };
  }
}

Em CatRoutePolice.police, será solicitada uma função, onde será passado por parâmetro a rota acessada no momento para que você possa validar se a mesma está dentro de suas políticas de acesso, devendo assim, retornar um boolean, onde true permite o acesso e false bloqueia.

Last updated