Dust.js Bootstrap不一致行为中的模板自定义助手

时间:2016-04-28 14:51:58

标签: angularjs node.js acl dust.js dust-helpers

我有一个Dust.js帮助器,我按如下方式应用一些acl逻辑:

'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)。在我的模板中的许多地方,它显示了预期的行为,除了Bootstrap 3导航栏,它通常不呈现任何内容,有时低于导航栏中的ul:

Below the navbar

有什么想法?请注意,我使用Angular将活动类放在链接中,它不是SPA,并且禁用了深层链接,但由于模板在服务器端呈现,因此无需执行任何操作。谢谢!

1 个答案:

答案 0 :(得分: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;
            }
        });
    });
};

克服无序的块。