Как сделать доступ только для администраторов?

Хочу сделать так, что бы авторизованные пользователи с доступом админа могли переходить по админским ссылкам. Ссылки для авторизованных пользователей работаю, а вот для админов нет. При этом, если пользователь не авторизован и переходит по админской ссылке, то всё равно видит страницу.
PS: Не понимаю как сделать, бьюсь уже 5-6 час. Все методы рабочие...Заранее благодарен!

App.run...
App.run(['$rootScope', '$location', 'User', function($rootScope, $location, User){
    $rootScope.$on('$routeChangeStart', function(event, next, current){
        if(next.$$route.auth){
            if(!User.AuthCheck()){
                $location.path('/');
            }

            if(next.$$route.originalPath == '/'){
                if(User.AuthCheck()){
                    $location.path(current.$$route.originalPath);
                }
            }
        }

        if(next.$$route.admin){
            if(!User.AuthCheck()){
                $location.path('/');
            }

            if(User.checkAdmin()){
                $location.path(current.$$route.originalPath);
            }
        }
    });

    $rootScope.AuthCheck = function(){
        return User.AuthCheck();
    }

    $rootScope.checkAdmin = function(){
        return User.checkAdmin();
    }
}]);


Роуты:
// Освновные роуты
    $routeProvide
        .when('/', {
            templateUrl: 'view/home.html',
            controller: 'HomeController',
        });

    // Для авторизованных
    $routeProvide
        .when('/auth/logout', {
            templateUrl: 'view/auth/logout.html',
            controller: 'UserController',
            auth: true
        });

    $routeProvide
        .when('/admin', {
            templateUrl: 'view/admin/home.html',
            controller: 'AdminController',
            auth: true,
            admin: true
        });

    $routeProvide.otherwise('/');
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 4
в контроллере страницы для администраторов можно проверять авторизован или нет, если нет - посылать куда-нибудь.
Ответ написан
DieZz
@DieZz
Я использую ui-router, обычно делаю так:
angular.module('app.config').run(run);

function run($rootScope, $state, $auth, $stateParams) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toStateParams) {
        if (!$auth.isAuthenticated() && toState.name !== 'signin') {
            $rootScope.toState = toState;
            $rootScope.toStateParams = toStateParams;
            event.preventDefault();
             $state.go('signin', {});
         }
    });
}

Таким же образом можно проверять может ли пользователь получать доступ к админке, и если может - пускаем, если редиректим обратно.
Ответ написан
@denakol
Я использую ui-router вместе с модулем angular-permission.
Можно создавать разные роли и на основе их редиректить пользователя.
Ответ написан
Комментировать
dima9595
@dima9595 Автор вопроса
Junior PHP
Проблему решил сам, по своему) Спасибо всем, кто помогал!

Вот код моего решения, вдруг пригодится)
$rootScope.$on('$routeChangeStart', function(event, next, current){
        if(next.$$route.auth){
            if(!User.AuthCheck()){
                $location.path('/');
            }

            if(next.$$route.originalPath == '/'){
                if(User.AuthCheck()){
                    $location.path(current.$$route.originalPath);
                }
            }
        }

        if(next.$$route.admin){
            if(!User.checkAdmin()){
                $location.path('/');
            }
        }
    });
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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