2016-05-03 3 views
6

Sto utilizzando il router UI nel mio progetto. La pagina iniziale della mia applicazione è composta da 4 schede, ciascuna di instradamento a un modello diverso. Questo è il mio attuale codice di instradamento, im utilizzando un forEach per creare 6 rotte.ui-router: percorso predefinito in base al ruolo utente

['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 
      } 
     }); 
    }); 

Per impostazione predefinita, quando l'utente esegue il login, va a "root.jobs.list.draft". Come reindirizzare a un determinato stato in base al ruolo dell'utente connesso (Amministratore, Utente, Impiegato ecc.). Se vuole reindirizzare tutti gli utenti che fanno parte del "Ingegnere" o ruolo "Piombo Ingegnere" per "root.jobs.list.inprogress"

All'inizio ho avuto questo nel controller, ma come si può vedere, non ha funzionato, perché ogni volta che ho cliccato su una linguetta, è sempre percorsi torna a "root.jobs.list.inprogress"

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

risposta

6

ho già dovuto risolvere che:

Ho registrato uno stato che è stato utilizzato solo per gestire la pagina predefinita in base al ruolo.

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

Il controller era semplicemente:

(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"); 
      } 
     } 
    ]); 
})(); 
1

Se il link del stato di default è lo stesso per ogni ruolo per esempio /utente/home sia per amministrazione e utente. Una cosa che possiamo fare è mostrare diversi modelli html nello stato predefinito dell'app in base ai ruoli. ui-router fornisce il servizio @stateProvider che ha proprietà propertiesProvider e ControllerProvider. Possiamo usarli per capire quale template e controller vogliamo usare per lo stesso stato di default. Here è il collegamento della documentazione.