Qual è il modo migliore per creare ACL AngularJS?

Voglio condividere con te (comunità) il mio problema.

Io uso lo stack MEAN , quindi uso Node.js con Express e AngularJS e ho un’applicazione per applicazioni singole.

Io uso il passport come strategia di autenticazione nel codice Node \ Express \ Jade . Voglio creare una sezione di amministrazione sulla mia pagina per gestire gli utenti e altre cose.

Voglio anche proteggere i siti AngularJS caricati in modo asincrono aggiungendo un controllo di accesso al mio $ routeProvider come:

 $routeProvider.when('/admin/users', { templateUrl: '/views/admin/users.html', auth: { required: true, roles: ['admin'] } }) 

Questo è solo uno pseudocodice che voglio raggiungere nella mia vera soluzione. Se l’utente non ha effettuato l’accesso, dovrebbe essere reindirizzato alla pagina /signin e se l’utente è connesso e non ha il ruolo appropriato per visualizzare questa pagina, dovrebbe essere reindirizzato per appropriarsi della vista con informazioni personalizzate.

Preferisco gestire il controllo degli accessi sul lato server, e semplicemente non servire nulla all’utente se lui / lui non dovrebbe essere in grado di accedervi. Quindi inserisco e interpreto la risposta dal server per eseguire operazioni come il reindirizzamento a un modulo di accesso.

Ciò consente meccanismi di sicurezza davvero flessibili. Ad esempio, posso configurare la mia sicurezza back-end con un firewall per qualcosa come hai descritto (dove una route “/ admin” e tutti i suoi discendenti dovrebbero essere protetti). Posso utilizzare gli ACL per proteggere singoli oggetti o un SecurityManager che consente analisi più complesse dell’utente che effettua la richiesta.

Forse questa non è una risposta diretta alla tua domanda, ma piuttosto un incoraggiamento ad affrontare il problema in modo diverso. Comunque penso che sia un approccio migliore di qualsiasi altra cosa che ho visto in termini di puro controllo degli accessi JS.

Dai un’occhiata a UI-Router: https://github.com/angular-ui/ui-router

È piuttosto interessante e puoi intercettare i cambiamenti di stato in base a qualsiasi schema di sicurezza desideri.

Lo stiamo usando con uno schema di sicurezza basato su authorization / ruolo / gruppo e funziona benissimo.