Search code examples
meteoradmindocument

Server side meteor this.userprofile


I have the following code that renders the currentUsers' documents in a collection. However I want an admin belonging to the same organization to also be able to view and edit the collection. this.user.profile.organization does not work unfortunately. So, how would I allow the object to be available to admins from belonging to the same organization. EVery document that gets created gets the organization of the currentuser.

Meteor.publish('skills', function skillsPublication() {
    return Skills.find({
        owner: this.userId,
  });
});

Solution

  • When you're on the server, you can always query the user document from the MongoDB database.

    Meteor.publish('skills', function skillsPublication() {
      const user = Meteor.users.findOne({ _id: this.userId })
      // now you can do user.profile.organization
    
      return Skills.find({
        $or: [
          { owner: this.userId },
          { organization: user.profile.organization }
        ] // returns a document owned by the user or owned by the user's organization
      })
    })
    

    Just a note, Meteor advises against using .profile field on your users collection, because that field is always published to the client. Meteor suggests that you use top-level keys on your user document instead.

    For more info, read: https://guide.meteor.com/accounts.html#dont-use-profile