2016-09-29 21 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