¿Cómo accedo a la propiedad 'resolver' de un estado raíz de UI-Router desde $ stateChangeStart?

Estoy tratando de implementar un sistema de verificación de acceso de usuarios y verificación de acceso en mi aplicación, sin embargo, sigo golpeando obstáculos. Creo que lo tengo de la manera correcta esta vez, pero tengo un último obstáculo.

Un poco de historia: intenté poner todo el código en $ rootScope.on ($ startChangeStart) y funcionó, horriblemente ... pero funcionó. La ruta siempre fue redirigida, pero debido a la verificación de autenticación en el backend, mostró la primera página de solicitud por 1/2 un segundo y luego la página de redireccionamiento cada vez. Por lo tanto, intenté "pausar" la carga de la página llamando a evt.preventDefault () justo al inicio de la función $ startChangeStart, que funcionó, pero al intentar volver al usuario a la ruta original, causó un bucle infinito en el enrutador.

Por lo tanto, después de investigar más y leer muchas publicaciones en la pila, estoy seguro de que 'resolver:' es el lugar adecuado para poner la comprobación de autenticación para garantizar que la página no se carga mientras ocurre, y luego redirigir al usuario si es necesario desde $ startChangeStart. ($ estado y evento siempre están indefinidos en mis intentos de inyectarlos en una función de resolución) Parece la combinación ganadora.

Mi problema: tengo la resolución del estado raíz en mi aplicación: 'main'

Esto fue para evitar la redundancia de código, sin embargo, no puedo determinar cómo acceder a las propiedades del estado raíz y, por lo tanto, el resultado de la resolución, desde la función $ stateChangeStart. El estado toState es el estado secundario, mientras que el estado fromState es el estado anterior o un estado abstracto con la ruta '^' ...

¿Tengo que poner la resolución en cada estado secundario para que esto funcione, o hay una manera de acceder al estado raíz desde este punto?

Configuración básica de la aplicación:

angular.module('App', ['ui.router', 'ui.bootstrap', 'ui.event', 'AngularGM', 'ngResource'])
.config(['$urlRouterProvider', '$stateProvider', function($urlRouterProvider, $stateProvider){
    $urlRouterProvider
        .when('/home', '/')
        .when('', '/')
        .when('/sign-up/joe', '/sign-up')
        .otherwise('/');

    $stateProvider
        .state('main', {
            url: '',
            abstract: true,
            templateUrl: 'views/main.html',
            controller: 'MainCtrl',
            resolve: {
                checkAccess: ['accountService', function(accountService) {
                    accountService.checkAuth(function(){
                        accountService.checkAccess(function (access){
                            return access;
                        });
                    });
                }]
            }
        })
        .state('main.home', {
            url: '',
            abstract: true,
            templateUrl: 'views/home.html',
            controller: 'HomeCtrl'
        })
        .state('main.home.index', {
            url: '/',
            templateUrl: 'views/home/index.html'
        });


.run(['$rootScope', '$state', '$stateParams', 'accountService', function ($rootScope, $state, $stateParams) {
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
        console.dir(toState);
        console.dir(toParams);
        console.dir(fromState);
        console.dir(fromParams);
        if (!toState.checkAccess.allowed) {
            event.preventDefault();
            $state.transitionTo(toState.checkAccess.newState);
        }
    });
}]);

Esta es la salida de las llamadas console.dir () en los dos objetos de estado:

Object
 name: "main.home.index"
 templateUrl: "views/home/index.html"
 url: "/"
 __proto__: Object

Object
 controller: "PlacesCtrl"
 name: "main.places.search"
 templateUrl: "views/places.html"
 url: "/places"
 __proto__: Object

Actualizar

Vaya, olvidé mencionar que la versión de AngularJS es v1.2.0-rc.2

$ state.current console.dir ()

Object
 abstract: true
 name: ""
 url: "^"
 views: null
 __proto__: Object

Respuestas a la pregunta(5)

Su respuesta a la pregunta