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