2016-09-29 55 views
1

家伙们对node_Acl有困难。如何定义node_acl公共可访问的资源

我已经adedd。

acl.allow('guest',['/docs/'],['show']); 

app.use(acl.middleware); 

但它显示我用户没有被授权。访问

acl.addUserRoles('api_user', 'business',function(err) { 

    if(!err) { 
    log.debug("api_user with business role created"); 
    } 
}); 


acl.addUserRoles('helpdesk', 'helpdesk',function(err) { 

    if(!err) { 
    log.debug("helpdesk with helpdesk role created"); 
    } 
}); 

acl.userRoles('admin', function(err, roles) { 
log.debug(roles); 
}); 

acl.roleUsers('business', function(err, users){ 

    log.debug(users); 
}); 

acl.hasRole('admin', 'business', function(err, hasRole) { 
log.debug("admin user hasRole business =>"+hasRole); 
}); 

acl.allow('admin', ['/api/hellobill/v1/hello'], ['get'], function(err) { 
    console.log("EROOR"+err); 
}); 

acl.allow([ 
     { 
      roles: ['guest'], 
      allows: [ 
       { resources: '/docs/', permissions: 'get' } 
      ], 
     } 
    ]); 


acl.allow('guest', '/docs/', ['get','put', 'delete']); 


app.get('/docs/', acl.middleware(), function (req, res) { 
     console.log(req); 
    }); 

acl.allow('public', ['/', '/docs/', '/api-docs/'], 'view'); 

acl.whatResources('public',function(err,resources){ 
     console.log(resources); 
}) 

回答

1

我不能没有看到您的代码的其余部分可以肯定的,但我要去猜测有问题的用户还没有被授予“客户”的角色,否则没有活跃的用户,当你击中该资源。据我所知,在这个库中你必须明确地授予你所指的任何角色,角色名称中没有暗示行为的魔法。

所以在某些时候,你必须做acl.addUserRoles(theUser, "guest")才行。

如果你想要的是根本就没有保护的资源,真正做到公开,那么我会建议只安装在中间件上应该保护的途径,例如:

app.use('/private', acl.middleware())

/*更新*/

好的,以及用户试图访问资源并得到错误?

我不认为它是相关的,但你也不需要你的资源中的斜杠。所以你可以做acl.allow('guest', 'docs', ['get','put', 'delete']);

+0

请你看看附加的代码吗? – danielad

+0

感谢您的编辑;我永远无法从我的iPhone上正确使用格式。 – Paul

+0

顺便说一句,使用招摇中间件? – danielad