Quel est le meilleur moyen de créer AngularJS ACL?

Je veux partager avec vous (communauté) mon problème.

J’utilise MEAN stack, j’utilise donc Node.js avec Express et AngularJS et je dispose d’une application unique.

J’utilise passport comme stratégie d’authentification dans le code Node \ Express \ Jade . Je veux créer une section administrateur sur ma page pour gérer les utilisateurs et autres éléments.

Je veux également protéger ces sites AngularJS chargés de manière asynchrone en ajoutant un contrôle d’access à mon routeProvider comme:

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

Ce n’est que le pseudo-code que je souhaite obtenir dans ma solution réelle. Si l’utilisateur n’est pas connecté, doit être redirigé vers la page /signin , et s’il est connecté et n’a pas le rôle approprié pour afficher cette page, doit être redirigé vers une vue appropriée avec des informations personnalisées.

Je préfère gérer le contrôle d’access côté serveur et ne rien servir à l’utilisateur s’il ne doit pas y accéder. Ensuite, j’interprète et interprète la réponse du serveur pour effectuer des opérations telles que le réacheminement vers un formulaire de connexion.

Cela permet des mécanismes de sécurité vraiment flexibles. Par exemple, je peux configurer ma sécurité d’arrière-plan avec un pare-feu pour quelque chose comme ce que vous avez décrit (où une route “/ admin” et tous ses descendants devraient être protégés). Je peux utiliser des ACL pour sécuriser des objects individuels, ou un SecurityManager qui permet des parsings plus complexes de l’utilisateur qui fait la demande.

Peut-être que ce n’est pas une réponse directe à votre question, mais plutôt un encouragement à aborder le problème différemment. Néanmoins, je pense que c’est une meilleure approche que tout ce que j’ai vu en termes de contrôle d’access JS pur.

Jetez un coup d’œil à UI-Router: https://github.com/angular-ui/ui-router

C’est assez cool et vous pouvez intercepter les changements d’état en fonction du système de sécurité que vous souhaitez.

Nous l’utilisons avec un schéma de sécurité basé sur une autorisation / un rôle / un groupe et cela fonctionne à merveille.