那么在这种特殊情况下,我建议创建一个自定义角色解析器。
事情是这样的:
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条目,或者您可以在角色解析器中添加更多逻辑。 –