Angular UI Router: 1 проверка подлинности перехода, авторизация и проверка на основе ролей - PullRequest
0 голосов
/ 14 мая 2018

Я использую новый ui-router 1.0.3 в своем приложении. Мне нужно реализовать аутентификацию и авторизацию в моем приложении. Вот мой код

   run(function ($transitions, $state, AuthService) {
    $transitions.onStart({
      to: function (state) {
        return !!(state.data && state.data.requiredAuth);
      }
    }, function (state) {
      if (!AuthService.isAuthenticated()) {
        return $state.target('auth.login');
      }
    }
    );
    $transitions.onStart({
      to: 'auth.*'
    }, function () {
      if (AuthService.isAuthenticated()) {
        return $state.target('app');
      }
    });
  });

Вот мой конфиг

  .config(function ($stateProvider,$urlRouterProvider) {
    $stateProvider
    .state('app', {
      redirectTo: 'contacts',
      url: '/app',
      data: {
        requiredAuth: true,
      },
      component: 'app'
    })
    .state('contacts', {
      parent: 'app',
      url: '/contacts?filter',
      component: 'contacts',
      params: {
        filter: {
          value: 'none'
        }
      },
      data :{
        role : ['Admin','Manager'],
        permission : 'read'
      },
      resolve: {
        contacts: function (ContactService) {
          return ContactService.getContactList().$loaded();
        },
        filter: function ($transition$) {
          return $transition$.params();
        }
      }
    })
    .state('contact', {
      parent: 'app',
      url: '/contact/:id',
      component: 'contactEdit',
      data :{
        role : ['Admin','Manager'],
        permission : 'edit'
      },
      resolve: {
        contact: function ($transition$, ContactService) {
          var key = $transition$.params().id;
          return ContactService.getContactById(key).$loaded();
        }
      }
    })
    .state('auth.register', {
      url: '/register',
      component: 'register'
    })
    .state('auth', {
      redirectTo: 'auth.login',
      url: '/auth',
      template: '<div ui-view></div>'
    })
    .state('auth.login', {
      url: '/login',
      component: 'login'
    })
    .state('auth.denied',{
      url:'/denied',
      component:'accessDenied'
    });
  $urlRouterProvider.otherwise('/auth/login');
  });

Вот сервисная функция

this.isAuthenticated = function () {
    return !!authData;
  };

Когда я захожу, он успешно обрабатывает аутентификацию и отправляет меня в состояние контакта. Когда я выхожу и получаю доступ напрямую к странице контакта, она застревает на странице входа. Мне нужно проверить данные о состоянии ролей и разрешений.

Нужна помощь.

...