我是环回的新手。我正在努力学习和实施ACL。
我有一个" PersistedModel"命名' Page'我使用两种不同的模式作为'员工'和'客户'都基于内置的'用户'模型。
关联: 一个页面属于' Employee'以及“客户”。两者都应该是页面的所有者。顾客&员工都有很多页面。所以,我在关系中添加了以下内容:
"customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "customerId"
},
"employee": {
"type": "belongsTo",
"model": "Employee",
"foreignKey": "employeeId"
}
ACL: 我想要'写'仅限所有者许可。所以,我在acls中添加了以下内容:
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
}
当我尝试补丁请求时,所有者客户的请求会成功执行。但是,所有者员工的请求会获得“授权错误”。
我在这里做错了什么?
答案 0 :(得分:4)
最近更新了LoopBack文档,他们在通知中添加了这两行:(http://loopback.io/doc/en/lb3/Using-built-in-models.html#user-model)
LoopBack在单个应用程序中不支持基于用户模型的多个模型。也就是说,您不能在单个应用程序中从内置用户模型派生多个模型。
所以基本上,我不应该创建两个基于' User'模型。 :(
答案 1 :(得分:1)
Loopback仅检查一个所有者关系here。
对于两位所有者,您需要编写自己的自定义角色并按role resolver
进行注册答案 2 :(得分:1)
正如loopback所说,你应该从用户模型扩展模型,定义角色(来自角色模型),并通过RoleMapping模型(它的内置模型)为任何用户或参与者分配角色。
例如:
添加关系:
"customer": {
"type": "belongsTo",
"model": "MyUser",
"foreignKey": "customerId"
},
"employee": {
"type": "belongsTo",
"model": "MyUser",
"foreignKey": "employeeId"
}
在MyUser模型中,添加以下ACL:
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "Customer",
"permission": "ALLOW"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "Employee",
"permission": "ALLOW"
}
答案 3 :(得分:1)
根据this commit(2017年9月28日发布的环回3.13.0),您可以将{ownerRelations: true}
设置为