2016-09-29 8 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())

/* Update */

ОК, и какой пользователь пытается получить доступ к ресурсу и получить сообщение об ошибке?

Я не думаю, что это связано, но вам также не нужны косые черты в вашем ресурсе. Итак, вы можете сделать acl.allow('guest', 'docs', ['get','put', 'delete']);

+0

, пожалуйста, вы можете взглянуть на добавленный код? – danielad

+0

Спасибо за изменения; Я никогда не могу заставить форматировать работать прямо с моего iphone. – Paul

+0

btw использую swagger middleware? – danielad