I have a problem with my authentication mechanism. I have to call an API to get current user roles, then check it to decide that user can view which pages of my app. My idea: call API in myApp.run block and then check:
angular.module('MyApp')
.run(['$rootScope', 'authenService', '$location', function($rootScope, authenService, $location) {
    var currentUser;
    function checkRole() {
      if(angular.isDefined(currentUser) && angular.isObject(currentUser) && ... && currentUser.isAdmin && $location.url() === '/dashboard') {
        return true;
      }
      return false;
    }
    /*
    ** @name: getCurrentUser
    ** @description: get current user info, use promise $q
    */
    authenService.getCurrentUser()
     .then(function getSuccess(currentUserInfo){
       currentUser = currentUserInfo;
       //if user is not admin and current page is not dashboard page, redirect to dashboard page
       if(!checkRole()) {
         $location.path('/dashboard');
       }
      }, function getError(){});
    //when user go to new path, check role if user have permission to access new page or not
    $rootScope.$on('$routeChangeStart', function onRouteChange() {
       if(!checkRole()) {
         $location.path('/dashboard');
       }
    })
}];
My problem: while getCurrentUser API is in progress (still not receive response from server), the code $rootScope.$on('$routeChangeStart') is executed and always redirects user to dashboard page. What should I do? Do you have any idea/solution to resolve this problem? or How can I wait for response from server and then run the UserCtrl controller(when user go to /user, the UserCtrl will execute without checkRole because response hasn't been received).
EDIT
The things I really want to do are when user goes to mySite.com, I will call an API to get user roles. The request is still in progress, but somehow user goes to mySite.com/#/user, the User page shows in web immediately(The requirement is user can't see User page till the request finishes). After the request finished, user will be redirected to mySite.com/#/dashboard if user doesn't have permission.
SOLUTION
I show loading screen to block my app till the request finished. Thank you for your help.
 
    