簡體   English   中英

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

[英]Node-acl method "isAllowed" always returns false unexpectedly

我正在嘗試使用 mongodb 和 express 實現 node-acl 以允許控制每個文檔,例如

  • 用戶查看所有文檔
  • 用戶只能編輯/刪除自己的文檔。

我采取了這種方法:

  1. 當用戶注冊時,我使用 post save 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' ] } 
    });

從上面我可以假設用戶有'put'作為'/trips/56933aedc012523c352d3d85'資源的權限

我還嘗試檢查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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM