2016-05-03 11 views
6

Używam routera UI w moim projekcie. Strona główna mojej aplikacji składa się z 4 zakładek, z których każda prowadzi do innego szablonu. To jest mój obecny kod routingu, używam forEacha do utworzenia 6 tras.ui-router: trasa domyślna oparta na roli użytkownika

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

Domyślnie, gdy użytkownik się loguje, przechodzi do "root.jobs.list.draft". Jak przekierować do danego stanu na podstawie roli zalogowanego użytkownika (administrator, użytkownik, urzędnik itp.). Jeśli chcesz przekierować wszystkich użytkowników, które są częścią „Inżyniera” lub „Lead Engineer” roli do „root.jobs.list.inprogress”

pierwotnie miał to w kontrolerze, ale jak widać, to nie działa, ponieważ za każdym razem, kliknąłem na karcie, to zawsze trasy z powrotem do „root.jobs.list.inprogress”

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

Odpowiedz

6

już musieli rozwiązać, że:

Zarejestrowałem stan, który był używany tylko do obsługi domyślnej strony na podstawie roli.

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

kontroler był po prostu:

(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

Jeśli link z domyślnego stanu jest taka sama dla każdej roli np /user/home zarówno administratora i użytkownik. Jedną z rzeczy, które możemy zrobić, to pokazać różne szablony html w domyślnym stanie aplikacji na podstawie ról. ui-router zapewnia usługę @stateProvider, która ma właściwości templateProvider i ControllerProvider. Możemy ich użyć do ustalenia, który szablon i kontroler chcemy użyć dla tego samego domyślnego stanu. Here to link do dokumentacji.