javascript - ui-router: rota padrão baseada no papel do usuário
Estou usando o UI router no meu projeto. A página inicial da minha aplicação consiste em 4 abas, cada uma roteando para um template diferente. Este é o meu código de roteamento atual, estou usando um forEach para criar 6 rotas.
['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
}
});
});
Por padrão, quando o usuário faz login, ele vai para "root.jobs.list.draft". Como redirecionar para um determinado estado com base no papel do usuário logado (Administrador, Usuário, Escriturário, etc.)? Se quiser redirecionar todos os usuários que fazem parte do papel "Engenheiro" ou "Engenheiro Líder" para "root.jobs.list.inprogress"
Originalmente eu tinha isso no controlador, mas como você pode ver, não funcionou, porque cada vez que eu clicava em uma aba, ele sempre redirecionava de volta para "root.jobs.list.inprogress"
if (user !== undefined) {
if (user.BusinessRole == "Engineer" || user.BusinessRole == "Lead Engineer")
$state.go('root.jobs.list.inprogress');
}
Resposta #1
Eu já tive que resolver isso :
Eu registrei um estado que foi usado apenas para lidar com a página padrão com base no papel.
$urlRouterProvider.otherwise("/");
$stateProvider.state("default", {
url:"/",
templateUrl: "app/core/home/default.html",
controller: "DefaultController"
});
O controlador era simplesmente :
(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");
}
}
]);
})();
Resposta #2
Se o link do estado padrão for o mesmo para cada função, por exemplo, /user/home tanto para admin quanto para user. Uma coisa que podemos fazer é mostrar diferentes templates HTML no estado padrão do aplicativo com base nas funções. O ui-router fornece o serviço @stateProvider, que tem as propriedades templateProvider e controllerProvider. Podemos usá-las para determinar qual template e controlador queremos usar para o mesmo estado padrão. Aqui está o link da documentação.
