那麼在這種特殊情況下,我建議創建一個自定義角色解析器。
事情是這樣的:
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系統。
謝謝! :)。 我的理解是正確的,因爲ACL表基本上只是模型json文件中指定的內容的持久性。 您的示例在模型中使用了一個包含對象所有者的字段。如果我想要更多的控制,例如所有者,編輯,個人實例的觀衆,這可能會在一個新的「instance_acl」表中? –
是的。您可以使用ACL表格來獲取動態內容(例如管理員可以管理其他用戶的權限),並且這些內容位於模型json文件中,僅用於靜態內容。爲了獲得更多控制權,您可以創建更具體的acl條目,或者您可以在角色解析器中添加更多邏輯。 –