Meteor.publish('currentUser', function() { return Meteor.users.find(this.userId); }); Meteor.publish('allUsers', function() { if (this.userId && isAdminById(this.userId)) { // if user is admin, publish all fields return Meteor.users.find(); }else{ // else, filter out sensitive info return Meteor.users.find({}, {fields: { secret_id: false, isAdmin: false, emails: false, notifications: false, 'profile.email': false, 'services.twitter.accessToken': false, 'services.twitter.accessTokenSecret': false, 'services.twitter.id': false, 'services.password': false }}); } }); Meteor.startup(function(){ Meteor.users.allow({ insert: function(userId, doc){ //TODO return true; } , update: function(userId, docs, fields, modifier){ // console.log("updating"); // console.log(userId); // console.log(docs); // console.log('fields: '+fields); // console.log(modifier); //uncommenting this crashes everything if(isAdminById(userId) || (docs[0]._id && docs[0]._id==userId)){ return true; } return false; } , remove: function(userId, docs){ if(isAdminById(userId) || (docs[0]._id && docs[0]._id==userId)){ return true; } return false; } }); }); // Posts Posts = new Meteor.Collection('posts'); // Meteor.publish('posts', function() { // return Posts.find({}, {sort: {score: -1}}); // }); Meteor.publish('paginatedPosts', function(find, options, limit) { options = options || {}; options.limit = limit; return Posts.find(find || {}, options); }); Meteor.publish('posts', function(find, options, subName) { var collection=Posts.find(find, options); var collectionArray=collection.fetch(); // if this is a single post subscription but no post ID is passed, just return an empty collection if(subName==="singlePost" && _.isEmpty(find)){ collection=null; collectionArray=[]; } // console.log("publishing :"+subName); // console.log(find, options.sort, options.skip, options.limit); // console.log('collection.fetch().length '+collectionArray.length); // for(i=0;i