如何定义node_acl公共可访问的资源

大家都很难与node_Acl。

我已经find了

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); }) 

我不能确定没有看到你的代码的其余部分,但我会猜测,有问题的用户还没有被授予“客人”的angular色,否则当你打这个资源时没有活跃的用户。 据我所知,用这个库你必须明确地授予你所指的任何angular色,angular色名中没有暗示行为的魔术。

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

如果你想要一个根本不受保护的资源,真正公开的,那么我build议只在需要保护的路由上安装中间件,例如:

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

/ *更新* /

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

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