how to resolve in run block with ui router?
piux opened this issue · comments
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.