Ui-router: itinéraire par défaut basé sur le rôle de l'utilisateur

J'utilise le routeur UI dans mon projet. La page d'accueil de mon application se compose de 4 onglets, chaque routage vers un modèle différent. C'est mon code de routage actuel, j'utilise un tout pour créer 6 routes.

['Draft','Assigned','InProgress','Completed','Rejected','All'].forEach(function (val) { $stateProvider.state({ name: 'root.jobs.list.' + val.toLowerCase(), url: '/' + val.toLowerCase(), views: { 'currentTab': { templateUrl: 'adminworkspace/jobs', controller: 'JobsController' } }, data: { userJobsStatus: val } }); }); 

Par défaut, lorsque l'utilisateur se connecte, il passe à "root.jobs.list.draft". Comment redirection vers un état donné en fonction du rôle de l'utilisateur connecté (Administrateur, Utilisateur, Commis etc.). Si vous souhaitez rediriger tous les utilisateurs qui font partie du rôle «Engineer» ou «Engine Engine» dans «root.jobs.list.inprogress»

J'ai initialement eu cela dans le contrôleur, mais comme vous pouvez le voir, cela n'a pas fonctionné, car chaque fois que j'ai cliqué sur un onglet, il traverse toujours "root.jobs.list.inprogress"

  if (user !== undefined) { if (user.BusinessRole == "Engineer" || user.BusinessRole == "Lead Engineer") $state.go('root.jobs.list.inprogress'); } 

J'ai déjà dû résoudre cela:

J'ai enregistré un état utilisé uniquement pour gérer la page par défaut en fonction du rôle.

  $urlRouterProvider.otherwise("/"); $stateProvider.state("default", { url:"/", templateUrl: "app/core/home/default.html", controller: "DefaultController" }); 

Le contrôleur était simplement:

 (function () { "use strict"; angular.module("core").controller("DefaultController", [ "$rootScope", "$state", "roles", function ($rootScope, $state, roles) { if ($rootScope.hasPermission(roles.SomeRoleName)) { $state.go("someStateName"); } else if ($rootScope.hasPermission(roles.SomeRoleName)) { $state.go("someStateName"); } } ]); })(); 

Si le lien de l'état par défaut est identique pour chaque rôle, par exemple, user / home pour admin et user . Une chose que nous pouvons faire est de montrer différents modèles html dans l'état par défaut de l'application en fonction des rôles. Ui-router fournit le service @stateProvider qui possède les propriétés templateProvider et ControllerProvider. Nous pouvons les utiliser pour déterminer quel modèle et notre contrôleur nous voulons utiliser pour le même état par défaut. Voici le lien de documentation.