Olá pessoal, tudo bem?
Na empresa em que trabalho estou desenvolvendo uma aplicação em angular e há uma regra de negocio em que determinadas paginas podem ser acessadas ou não, variando de acordo com o perfil do usuário (Administrador, coordenador, etc). Para validar isso criei uma API do tipo post que recebe o usuário e a rota que deseja acessar, retornando um true or false após as validações. Não sei se fiz da melhor maneira, mas coloquei a chamada dessa API no arquivo app-routing.module.ts com o parâmetro "CanActivate:[]". Até ai está ok, porém nos testes que fiz consegui acessar diversas vezes rotas que não deveria. Identifiquei que isso ocorre devido o método estar dando o retorno antes da requisição http concluir. Já tentei colocar um thread sleep para forçar esperar o retorno e não funcionou.
Classe chamada pelo CanActivate:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
var rota:string = route.url.toString();
if(this.accountService.isAllowed(rota)){
console.log("Rota permitida!");
return true;
}else {
console.log("Rota não autorizada!");
return false;
}
}
Chamada da API:
isAllowed(rota:string){
var tk:string = window.localStorage.getItem('token');
var validationForm = {
token:tk,
subModulo:rota
};
var isAllowed:Boolean = false;
this.http.post<any>(`${environment.api}/api/user/validarPermissao`, validationForm).subscribe(x =>{
isAllowed = x;
});
return isAllowed;
}
Conseguem me ajudar?