2016-04-28 6 views
0

に、私は次のように私はいくつかのACLロジックを適用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; 
      } 
     }); 
    }); 
}; 

アウト・オブ・オーダー・チャンクを克服するには。

関連する問題