2015-06-16 81 views
0

我正在創建一個模式來管理用戶的權限。但是當模態被加載時。如果用戶具有角色,則控制檯從服務器返回true。而{{#if hasRole}}仍然顯示錯誤的標籤。#if與Roles.userIsInRole不起作用

editUserPermissionsModal.html

<tbody> 
    {{#each roles}} 
    <tr> 
     <td>{{this.name}}</td> 
     <td> 
      {{#if hasRole}} 
      <span class="label label-success">Toegang</span> 
      {{else}} 
      <span class="label label-danger">Geweigerd</span> 
      {{/if}} 
     </td> 
     <td> 
      <select class="roleSelect"> 
       {{#if hasRole}} 
       <option value="allow">Toestaan</option> 
       <option value="deny">Weigeren</option> 
       {{else}} 
       <option value="deny">Weigeren</option> 
       <option value="allow">Toestaan</option> 
       {{/if}} 
      </select> 
     </td> 
    </tr> 
    {{/each}} 
</tbody> 

editUserPermissionsModal.js

Template.editUserPermissionsModal.helpers({ 
    roles: function() { 
    return Roles.getAllRoles(); 
    }, 

    hasRole: function(){ 
    var userId = Session.get("editing_user"); 
    var role = this.name; 
    Meteor.call("checkRole", userId, role, function(error, result){ 
     if(error){ 
     console.log("error", error); 
     } 
     if(result){ 
     console.log(result); 
     return result; 


     } 
    }); 
    } 

}); 

Template.editUserPermissionsModal.events({ 
    "change .roleSelect": function(event, template){ 

    var addRole = event.target.value; 

    if(addRole == 'allow') { 
     var user = Session.get("editing_user"); 
     var role = this.name; 

     Meteor.call('addRoleToUser', user, role) 

    } 

    } 
}); 

server.js

checkRole:function(userId, role) { 
    return Roles.userIsInRole(userId, role); 
    } 

回答

0

這是問題的一個典型的 「一個助手裏的方法調用」。你可以閱讀有關它here

既然你需要可變參數的方法,在你的情況下,最簡單的解決辦法可能是使用David Weldon's answer並安裝Sashko的meteor-reactive-method包:

$ meteor add simple:reactive-method 

然後:

Template.editUserPermissionsModal.helpers({ 
    roles: function() { 
    return Roles.getAllRoles(); 
    }, 

    hasRole: function(){ 
    var userId = Session.get("editing_user"); 
    var role = this.name; 
    var result = ReactiveMethod.call("checkRole", userId, role); 
    console.log(result); 
    return result; 
    } 
});