baskerville42
@baskerville42
Учусь работать (Junior)

Проверка доступа к странице. Как правильно реализовать?

Есть готовое SPA в котором авторизуются 3 типа юзеров. Пытаюсь написать сервис который должен по account_type-у юзера проверить имеет ли он доступ к запрашиваемой странице. Застрял именно на самой проверке.

Через .run запускаю данную функцию
function checkAccess(AccountUtilities, $route, $rootScope) {
        $rootScope.$on('$routeChangeStart', function() {
            AccountUtilities.accessCheck();
        });
    }


AccountUtilities.accessCheck(); - это сам сервис в котором и должна происходить проверка на доступ, передавая туда тип аккаунта и проверяя как-то куда именно пользователь лезет. Если у юзера нету доступа к запрашиваемой странице его или редиректит на его домашнюю страницу или если пользователь вообще не залогинен то редиректит на login страницу.

В самом приложении есть страницы которые доступны только одному типу аккаунта, общие страницы которые доступны любому юзеру (Мой кабинет, etc) и "внешние страницы" такие как регистрация или страница входа куда будучи авторизованным юзер не должен попасть.

Проблема моя заключается именно в проверке. Не могу придумать как красивей проверять имея на руках тип аккаунта и кучу информации о роутах (знаю текущий роут, список вообще всех доступных и куда собственно юзер лезет). Из вариантов решения пока вижу только такие:
  • в контроллерах страниц задавать через $rootScope для какого типа аккаунта эта страница предназначена (этот пока рассматриваю как самый элегантный)
  • у всех роутов есть общие части юрл, думал через регулярку их выдирать и сравнивать (какой-то костыльный способ)
  • есть ещё варианты, но они уже очень извращённые как по мне


Прошу поделится мудростью и опытом, как правильнее реализовать такую проверку, что бы при добавлении роутов не приходилось где-то постоянно что-то дописывать или исправлять.
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ответы на вопрос 1
matroskin13
@matroskin13
JavaScript developer, GO developer
юзайте ui-router. в ui-router, есть классная фича resolve.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы