我正在尝试为我的其余API设置访问控制。 Loopback为处理基于用户/角色/主体的访问提供了一个很好的起点。
但是,如果我想要的不仅仅是提供的东西,例如,模型实例的多个所有者?将条目添加到ACL表是否足够?或者我应该创建一个新的角色/解析器,如果是,我可以/应该重用现有的ACL模型/表还是自己创建?
环回很棒,但是文档缺乏深度,最终会让你阅读源代码。
答案 0 :(得分:2)
在这种特殊情况下,我建议创建一个自定义角色解析器。
这样的事情:
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'));
}
});
});
然后你可以将它添加到acls中(在模型静态acls中,在json文件中,或者将其添加到ACL表中):
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$inOwners",
"permission": "ALLOW",
"property": "*",
"model": "*"
}
请记住,每当对环回方法的访问取决于文档/行中的内容时,您只能使用角色解析器为其定义ACL,否则您必须创建自己的ACL系统。