FirebaseExtended / angularfire

AngularJS bindings for Firebase

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

how to resolve in run block with ui router?

piux opened this issue · comments

commented

Version info

dependencies: {
'angular-chart.js': '^1.0.3',
'angular-material': '^1.1.1',
'angular-material-data-table': '^0.10.9',
'angular-md5': '^0.1.10',
'angular-ui-router': '^0.3.1',
angularfire: '^2.0.2',
bootstrap: '^3.3.7',
materialize: '^0.97.7',
'ui-router.login': '^0.3.4',
}

Im trying to add some roles in my app, so my database is like this

/user
    -name:name
    -email:email
    -rank:rank

this is my ui.router states

  /...../
            .state('list', {
                parent: 'index',
                url: '/list',
                data: {
                    requireLogin: true
                },
                templateUrl: 'pages/list.html',
                controller: 'ListCtrl'
            })
            .state('list.user', {
                url: '/user',
                data: {
                    role: 'Admin'
                },
                views: {
                    'detail@index': {
                        templateUrl: 'components/user/userView.html',
                        controller: 'userController as user'
                    }
                },
            })
 /...../

this is my user service.

angular
    .module('statusApp')
    .factory('User', UserService);

function UserService($firebaseArray, $firebaseObject, $rootScope) {
    function getLoggedInUser() {
        var user = localStorage.getItem('firebase:authUser:AIzaSyAdE_7h8RqjF8HFVgmyOgGwJN6ay5cxkNk:[DEFAULT]');
        if (user) {
            var t = JSON.parse(user);

            return t['stsTokenManager']['accessToken'];
        } else {
            return false;
        }


        function getID() {
            var user = localStorage.getItem('firebase:authUser:AIzaSyAdE_7h8RqjF8HFVgmyOgGwJN6ay5cxkNk:[DEFAULT]');
            if (user) {
                var t = JSON.parse(user);

                return t.uid;
            } else {
                return false;
            }
        }

        function checkRole(user, role) {
            //var ref = firebase.database().ref();
            var ref = firebase.database().ref('users/' + user);
            var myrole = $firebaseObject(ref);

            return myrole.rank === role;
        }
        return {
            checkRole: checkRole,
            getLoggedInUser: getLoggedInUser,
            getID: getID
        }
    }
and my app run block is as follow


and this is my run block


        .run(function($rootScope, $state, User) {


        $rootScope.$on('$stateChangeStart', function(event, toState, toParams) {
                var requireLogin = toState.data.requireLogin;
                var requireRole = toState.data.role;


                var loggedInUser = User.getLoggedInUser();

                var myid = User.getID()
                console.log(requireRole);
                var check= User.checkRole(myid,requireRole);
                console.log(check);

                if (requireLogin && !loggedInUser && check) {
                    event.preventDefault();
                    return $state.go('auth');
                    $rootScope.loggedInUserData = User.getUserData(loggedInUser.uid);
                 }


            });
        })

no matter what i do my checkRole function always brings up a undefined and my object isnt sinc, after watching the firecast video, it seems to be a problem with resolving, but i have searched an example using roles and being new to angular i dont really understand, not to mention that all examples are old.

how can i make sure that my app resolve and loads the data before checking the if statement in the run block?

Closing as invalid.

This is a usage question, which is better suited for Stack Overflow or the Firebase Google Group.