2016-04-28 101 views
0

我有,我申請了一些ACL邏輯如下:a Dust.js幫手:Dust.js模板自定義助手在引導不一致行爲

'use strict'; 

import dust from 'dustjs-linkedin'; 
import acl from '../config/acl'; 

dust.helpers.accessControl = function(chunk, context, bodies, params) { 
    let userId = params.userId; 
    let resource = params.resource; 
    let permission = params.permission; 

    acl.acl.isAllowed(userId, resource, permission, function(err, res){ 

     if(res){ 
      chunk.render(bodies.block, context); 
      return chunk; 
     } 
     else { 
      return chunk; 
     } 
    }); 
}; 

在模板:

{@accessControl userId=user._id resource="/admin" permission="get"} 
        <li class="nav-item"> 
         <a class="nav-link" ng-class="{'active' : getPath()[0] == 'admin'}" href="/admin">Admin</a> 
        </li> 
       {/accessControl} 

的助手獲得用正確的參數正確調用,並且node_acl正確授權用戶(回調中的restrue)。在我的內模板很多地方,它顯示了預期的行爲,除了引導3導航欄,它通常呈現什麼,有時在導航欄的下面UL:

Below the navbar

有什麼想法?請注意,我正在使用Angular將活動類放入鏈接中,它不是SPA,並且禁用了深層鏈接,但由於模板正在服務器端呈現,因此它無關緊要。謝謝!

回答

0

node_acl的請求是異步的。我需要將我的幫手改爲:

dust.helpers.accessControl = function(chunk, context, bodies, params) { 
    let userId = params.userId; 
    let resource = params.resource; 
    let permission = params.permission; 

    return chunk.map(function(chunk) { 
     acl.acl.isAllowed(userId, _reverse(resource), permission, function(err, res){ 
      if(res && bodies['block']) { 
       return chunk.render(bodies['block'], context).end(); 
      } 
      else { 
       return chunk; 
      } 
     }); 
    }); 
}; 

克服無序塊。