I began to start a fiddle to get further help, but I wound up just getting pissed off at setting up my overly complex situation in a fiddle and solved the damn thing myself. Here's what I came up with:
'use strict';
angular.module('bpmWaitForAdmin', [])
.service('bpmWaitForAdmin', function ($rootScope, syncData, waitForAuth) {
return {
init: function (auth) {
$rootScope.$on('$firebaseSimpleLogin:login', function (e, user) {
var admins = syncData('admins');
admins.$on("loaded", function () {
if (user.uid in admins) {
$rootScope.$broadcast('bpmWaitForAdmin:true');
}
else {
$rootScope.$broadcast('bpmWaitForAdmin:false');
}
});
});
$rootScope.$on('$firebaseSimpleLogin:logout', function () {
$rootScope.$broadcast('bpmWaitForAdmin:false');
});
}
};
})
.directive('bpmShowAdmin', function ($rootScope, $timeout) {
return {
restrict: 'A',
compile: function (element, attributes) {
element.addClass('hide');
$rootScope.$on("bpmWaitForAdmin:true", function () {
$timeout(function () {
element.removeClass('hide');
});
});
$rootScope.$on("bpmWaitForAdmin:false", function () {
$timeout(function () {
element.addClass('hide');
});
});
}
}
});