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

时间:2016-09-29 11:39:57

标签: node.js express 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 个答案:

答案 0 :(得分:1)

我不能确定没有看到你的其余代码,但是我猜测有问题的用户没有被授予'guest'角色,否则当你点击那个时没有活跃的用户资源。据我所知,使用该库您必须明确授予您引用的任何角色,角色名称中没有暗示行为的魔力。

所以在某些时候你必须做acl.addUserRoles(theUser, "guest")才能使它发挥作用。

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

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

/ *更新* /

好的,用户正在尝试访问资源并收到错误?

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