Justin Erswell
Justin Erswell

Reputation: 708

show element in template if owner meteor js

I am writing a messaging app which has a delete / edit function for a user for a given message that is submitted. What I would like to do is write something like:

{{#if currentUser._id === this._id}}
     <!-- Show -->
{{/if}}

But this is probably wrong I have a template written for the message record:

<template name="message">
  <div class="row message-row">
    <div class="col-md-12">
      <div class="message-container">
        <div class="message-avatar">
          <img src="{{userAvatar}}">
        </div>
        <p>{{message}}</p>
        <div class="message-time">{{prettifyDate time}}</div>
        <!-- this is the div to hide / show based on the conditional -->
        <div class="message-controls">
          <button class="btn btn-link btn-xs" type="button" id="deleteMessage"><i class="fa fa-trash-o"></i></button>
          <button class="btn btn-link btn-xs" type="button" id="editMessage"><i class="fa fa-edit"></i></button>
        </div>
        <!-- end -->
      </div>
    </div>
  </div>
</template>

And I am using the following in my client.js

  Template.messages.messages = function() {
    return Messages.find({}, { sort: {time: -1} });
  }

But at this point I am stuck

Upvotes: 0

Views: 447

Answers (1)

sbking
sbking

Reputation: 7680

Assuming your message documents have a userId field, you can simply do this:

Template.message.helpers({
  isOwner: function() {
    return this.userId === Meteor.userId();
  }
});

and:

{{#if isOwner}}
  <!-- controls -->
{{/if}}

You could also make a more flexible, reusable global helper for this:

Template.registerHelper('isCurrentUser', function(userId) {
  return userId === Meteor.userId();
});
<!-- in this example, the document might have an `ownerId` field rather than `userId` -->
{{#if isCurrentUser ownerId}}{{/if}}

Of course, you also need to validate the updates on the server with the allow/deny API or with custom methods.

Upvotes: 4

Related Questions