“访问资源权限不足”:使用Mongoose + Express的ACL中间件

我正在尝试为基本路由validation设置ACL中间件 。 在这个例子中,我只是想确保用户(在这个例子中是我)拥有'pipe理员'权限。

我的路线如下所示:

// define the home page route router.get('/', acl.middleware(1, '594a984a9815beb8219dca22', 'admin'), function (req, res) { acl.userRoles('594a984a9815beb8219dca22', function(err, roles){ res.send(roles) }) }) 

用中间件,我得到的消息是:

 HttpError: Insufficient permissions to access resource 

如果我在没有中间件的情况下运行这个路由,usersRole()函数确实会返回

 ['admin'] 

作为回应。 我不知道还有什么需要发生的ACL来承认我作为pipe理员。 我显然有'pipe理员'的angular色。

UPDATE

这是连接代码:

 var dbConn = mongoose.connect(configDB.url); // connect to our database acl = new acl(new acl.mongodbBackend(mongoose.connection.db)) 

我的config.url是:

 module.exports = { 'url' : 'mongodb://127.0.0.1:27017/NodeMongo' } 

问题与连接mongoose的asynchronous性有关。 在路由中,mongoose / acl连接已经被创build,但是在那之前(例如,中间件函数调用)。

我最终find了正确的方法来感谢Alex Mueller的 这个例子

实际上,您需要从以下callback中初始化acl对象:

 mongoose.connection.on('connected', function(test) { require('./authorization').init(); }); 

然后在你的路由文件中,访问完全初始化的acl对象。 请参考这个例子。 这很容易遵循。