2016-09-24 23 views
0

我試圖爲我的rest API設置訪問控制。 Loopback爲處理基於用戶/角色/委託人的訪問提供了一個很好的起點。如何使用Loopback ACL模型/表?

但是,如果我想要的東西超過提供的,例如模型實例的多個所有者?將條目添加到ACL表中就足夠了嗎?或者我應該創建一個新的角色/解析器,如果可以,我可以/應該重新使用現有的ACL模型/表還是自己推出?

Loopback很棒,但文檔缺乏深度,最終導致您閱讀源代碼。

回答

1

那麼在這種特殊情況下,我建議創建一個自定義角色解析器。

事情是這樣的:

Role.registerResolver('$inOwners', function (role, ctx, callback) { 
    ctx.model.count({ 
    id: ctx.modelId, 

    // This only works for mongo db... 
    owners: ctx.accessToken.userId 
    }, function(err, count) { 
    if (err) { 
     callback(err); 
    } else if (count) { 
     callback(); 
    } else { 
     callback(new Error('Not Owner')); 
    } 
    }); 
}); 

然後你就可以將其添加到訪問控制列表(無論是在車型靜態的ACL,在JSON文件,或者將其添加到ACL表):

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$inOwners", 
    "permission": "ALLOW", 
    "property": "*", 
    "model": "*" 
} 

請記住,無論何時訪問回送方法取決於文檔/行內的內容,您只能使用角色解析程序爲其定義ACL,否則您必須創建自己的ACL系統。

+0

謝謝! :)。 我的理解是正確的,因爲ACL表基本上只是模型json文件中指定的內容的持久性。 您的示例在模型中使用了一個包含對象所有者的字段。如果我想要更多的控制,例如所有者,編輯,個人實例的觀衆,這可能會在一個新的「instance_acl」表中? –

+0

是的。您可以使用ACL表格來獲取動態內容(例如管理員可以管理其他用戶的權限),並且這些內容位於模型json文件中,僅用於靜態內容。爲了獲得更多控制權,您可以創建更具體的acl條目,或者您可以在角色解析器中添加更多邏輯。 –