AngularJS | Перенаправить на MainRoute, когда использование не имеет разрешения, чтобы увидеть страницу - PullRequest
0 голосов
/ 22 мая 2019

Я использую многоуровневую систему аутентификации с моим приложением AngularJS (Angular 1.6.4).

Это означает, что у пользователя есть несколько разрешений. В зависимости от того, какое разрешение он имеет, он может видеть или нет страницу, к которой относятся разрешения.

Мне уже удалось скрыть все необходимые элементы HTML, относящиеся к этому экрану, в зависимости от уровня разрешений. Но теперь у меня возникла небольшая проблема с защитой самого маршрута.

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

Вот что я сделал:

  $rootScope.$on("rebalancing", () => {
    if (user.permissions !== Role.ViewConnectors || user.permissions !== 
       Role.ManageConnectors) {
      redirectTo(application.APP)
    }
  });

Но, похоже, он ничего не делает. Не могли бы вы мне помочь. Я понимаю, что это действие нужно проверить, прежде чем все остальное. Итак, rootScope казалось хорошим началом.

Подробнее Пользователь предоставлен ReduxStore, который я передаю. application.APP - домашний маршрут приложения. И redirectTo, это пользовательская утилита для redirectTo(/etc...)

1 Ответ

0 голосов
/ 23 мая 2019

В Angular2 + есть RouteGuards, в AngularJS вы можете использовать аналогичное решение, исходя из предположения, что вы используете uiRouter

В вашем штате добавьте функцию разрешения, которая проверяет, имеет ли использование право доступа, возвращаетотклоненное обещание, если нет

    resolve: {
       security: ['$q', function($q, Auth){
           // Checking permission here, you can pass the resource or some other 
           // data is necessary
           if(!Auth.isAllowed()){
              return $q.reject("Not Authorized");
           }
       }]

Это позволит избежать загрузки контроллера.Чтобы перенаправить на ваш LandingPage, добавьте этот слушатель в вашу функцию запуска приложения

        $rootScope.$on('$stateChangeError', function(e, toState, toParams, fromState, fromParams, error){

            if(error === "Not Authorized"){
                $state.go("landingPageOrWherever");
            }
        });

Я протестировал его, и он работает.

Как уже ответил здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...