【发布时间】:2016-02-11 14:00:56
【问题描述】:
我在理解如何将Node ACL 与猫鼬模块一起使用时遇到了一些麻烦。只要所有内容都在一个文件中,我就可以让它运行良好。但是,如果我想将路由分解为单独的文件,如何访问其他模块中的 acl 实例?
我可以让 acl 正常使用以下代码。它初始化,在数据库中创建集合,并向用户添加权限。
// App.js
const mongoose = require('mongoose');
const node_acl = require('acl');
const User = require('./models/User');
mongoose.connect(/* connection string */);
acl = new node_acl(new node_acl.mongodbBackend(mongoose.connection.db, '_acl'));
acl.allow([
{
roles: ['guest'],
allows: [{ resources: 'login', permissions: 'get' }],
},
{
roles: ['admin'],
allows: [{ resources: '/users', permissions: '*' }]
}
]);
var user = User.findOne({username: 'coffee'}, (err, user) => {
console.error(user.id);
acl.addUserRoles(user.id, 'admin');
});
我想不通的是如何像这样在另一个模块中正确访问 acl 实例。
// routes/foo.js
const acl = require('acl');
const router = require('express').Router();
// initialize acl ?
router.route('/', acl.middleware(/* rules */), (req, res) => {
// route logic
});
module.exports = router;
此代码产生以下错误:TypeError: acl.middleware is not a function。
我是否需要在每个路由模块中使用数据库连接创建一个新的 acl 实例?如果是这样,再次从 Mongoose 获得连接的最佳方式是什么?如果没有,或者有没有办法将它传递给每条路线?
谢谢!
【问题讨论】:
标签: javascript node.js acl