Molte applicazioni necessitano di un meccanismo di autenticazione e autorizzazione. Questo significa che prima di permettere all'utente di accedere a un component, è necessario verificare che l'utente ne abbia il permesso.
In questi casi torna utile utilizzare un guard che altro non è che una classe che implementa l'interfaccia CanActivate. Come si intuisce dal nome, un guard che implementa l'interfaccia CanActivate viene eseguito quando si cerca di navigare verso un component. In questa fase possiamo verificare i privilegi dell'utente e mandare avanti o bloccare la navigazione.
L'interfaccia CanActivate espone il metodo canActivate che è quello che viene realmente invocato. Questo metodo accetta in input la route da attivare e uno snapshot dello stato del router. Il primo parametro è quello più utile in quanto possiamo risalire alla route da attivare e fare tutti i controlli. Il metodo deve tornare un boolean, oppure una Promise o un Observable. Se il valore finale è false, la navigazione si blocca, altrimenti procede normalmente. In questo esempio possiamo vedere come creare un guard e come configurarlo nella route.
import { Injectable } from '@angular/core'; import { CanActivate } from '@angular/router'; @Injectable() export class ActivationGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { return true; } } const routes: Routes = [ { path: 'second', component: SecondComponent, canActivate: [ActivationGuard] }, ];
Oltre a eseguire codice prima di navigare verso un component, il sistema di routing permette anche di eseguire codice prima di navigare via da un component. Questa funzionalità torna utile nelle form di dettaglio. In queste form, se l'utente modifica dei dati e poi naviga a un altro component senza salvare è buona cosa chiedere una conferma all'utente per evitare una involontaria perdita di dati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire liste di tipi semplici con Entity Framework Core
Eseguire attività pianificate con Azure Container Jobs
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare i primary constructor in C#
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Miglioramenti nelle performance di Angular 16
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
C# 12: Cosa c'è di nuovo e interessante
Paginare i risultati con QuickGrid in Blazor
Gestire i null nelle reactive form tipizzate di Angular
Load test di ASP.NET Core con k6
Eseguire operazioni con timeout in React
I più letti di oggi
- PWAConf 2020 - Online
- Reactive form tipizzati con FormBuilder in Angular
- Utilizzare ChatGPT con Azure OpenAI
- Mantenere sempre reattiva una Lambda di AWS
- Messaggi in tempo reale con Blazor Server
- Una chat con #aspnetcore e #websockets https://aspit.co/bmh di @GentiliMoreno #webapi #aspnetcore2
- Autenticarsi in modo sicuro su Azure tramite GitHub Actions
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Creare una MarkupExtension per accedere alle proprietà statiche in Silverlight 5.0
- Navigare la struttura visuale di un UIElement fino a recuperare l'elemento logico in Silverlight 3.0