Node-acl方法“isAllowed”总是意外地返回false

我正在试图用mongodb实现node-acl,并表示允许控制每个文档,例如

  • 用户查看所有文档
  • 用户只能编辑/删除自己的文件。

我采取了这种方法:

  1. 当用户注册时,我使用后保存挂钩来创build一个用户并为其分配一个angular色:

    UserSchema.post('save', function(doc) { var roles = doc.roles || []; if (!roles.length) { roles = ['user']; } acl.addUserRoles(doc._id.toString(), roles, function(err) { console.log(err, 'added user'); }); }); 
  2. 现在,用户已经在系统中创build,他们现在可以创build一个旅程。 像上面一样,我使用后保存挂钩将给定的权限添加给给定的用户在给定的资源:

     TripSchema.post('save', function(trip) { acl.allow(trip.user.toString(), '/trips/' + trip._id, '*', function(err) { }); }); 
  3. 然后,我使用自定义的简单中间件function来检查给定的用户是否有权访问给定的资源:

     var middleware = function (req, res, next) { acl.isAllowed(req.user._id.toString(), req.path, ['put'], function (err, allow) { if (allow) { next() } res.status(403).send({}); }); }; 

但是, allow总是错误的,我认为这可能与用户分配的权限有关。

  acl.whatResources(req.user._id.toString(), function (err, roles) { console.log(err, roles); // roles === { '/trips/56933aedc012523c352d3d85': [ 'put' ] } }); 

从上面我可以假设用户已经'放'作为'/ trips / 56933aedc012523c352d3d85'资源的许可

我也尝试检查areAnyRolesAllowed ,如果任何给定的angular色具有正确的权限,应该返回true

  acl.areAnyRolesAllowed( req.user._id.toString(), '/trips/56933aedc012523c352d3d85', 'put', function(err, allowed) { console.log(err, allowed); // allowed === true }); 

这只会增加更多的困惑,为什么isAllowed总是返回false

最后,我使用allowedPermissions进行进一步检查,返回给定用户必须访问给定资源的所有允许权限

  acl.allowedPermissions(req.user._id.toString(), req.path, function (err, permissions) { console.log(err, permissions); // permissions === { '/trips/56933aedc012523c352d3d85': [] } }); 

由此我们可以假定用户对这个特定的资源没有任何权限。 为什么? 这似乎与whatResources返回的内容有冲突,所以我有点困惑。

是否有一个步骤,我错过了我需要添加权限?