gpt4 book ai didi

node.js - Node-acl 方法 "isAllowed"总是意外返回 false

转载 作者:行者123 更新时间:2023-12-02 16:07:23 24 4
gpt4 key购买 nike

我正在尝试使用 mongodb 和express 来实现node-acl,以允许控制每个文档,例如

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

我采取了这种方法:

  1. 当用户注册时,我使用保存后 Hook 来创建用户并为其分配角色:

    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. 现在用户已在系统中创建,他们现在可以创建行程。与上面一样,我使用 post save Hook 将给定的权限添加到给定的用户对给定的资源:

    TripSchema.post('save', function(trip) {
    acl.allow(trip.user.toString(), '/trips/' + trip._id, '*', function(err) {

    });
    });
  3. 然后,我使用自定义的简单中间件函数来检查给定用户是否可以使用给定权限访问给定资源:

    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 始终为 false,我认为这可能与为用户分配的权限有关。

    acl.whatResources(req.user._id.toString(), function (err, roles) {
console.log(err, roles);

// roles === { '/trips/56933aedc012523c352d3d85': [ 'put' ] }
});

从上面我可以假设用户对“/trips/56933aedc012523c352d3d85”资源具有“put”权限

我还尝试检查 areAnyRolesAllowed 如果任何给定角色具有正确的权限,它应该返回 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 返回的内容冲突,所以我有点困惑。

我是否遗漏了需要添加权限的步骤?

最佳答案

您必须调用配置文件中的方法:

require('rout/of/your/policy/file').invokeRolesPolicies();

如果不这样做,总是会意外返回 false

关于node.js - Node-acl 方法 "isAllowed"总是意外返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com