Loopback:具有belongsTo关系的模型的多个所有者
我是新来的loopback。我试图学习&实施ACL。Loopback:具有belongsTo关系的模型的多个所有者
我有一个名为'Page'的“PersistedModel”。我使用两种不同的模式,分别是'员工'和'客户',都基于内置的'用户'模式。
页面属于“员工”和“客户”。两者都应该是页面的所有者。客户&员工都有很多页面。所以,我增加了以下的关系:
"customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "customerId"
},
"employee": {
"type": "belongsTo",
"model": "Employee",
"foreignKey": "employeeId"
}
ACL:只对业主 我想“写入”权限。所以我添加了以下内容:
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
}
当我尝试一个补丁请求时,所有者客户的请求被成功执行。但是,业主员工的请求会得到'授权错误'。
我在做什么错在这里?
环回文件寄存器是最近更新的,他们已经在通知中加入以下两行:(http://loopback.io/doc/en/lb3/Using-built-in-models.html#user-model)
环回做在单个应用程序中不支持基于User模型的多个模型。也就是说,您不能在单个应用程序中使用内置User模型派生出多个模型。
所以基本上,我不应该创建两个不同的模型,这些模型是基于'用户'模型。 :(
回环说,你要一个从用户模式扩展模型,定义角色(从角色模型),并通过RoleMapping模型分配角色的任何用户或参与者(它内置的模型)。
例如:
- 从用户模型扩展模型,并命名MYUSER
- 创建 '客户' 和 '员工' 的角色
-
添加关系:。
"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" }
谢谢你的回答。但是,在这个解决方案中,任何“客户”都可以编辑任何记录。仅当用户标识与特定记录相关联时,$ owner角色才允许。 –
对!您可以[https://loopback.io/doc/en/lb3/Defining-and-using-roles.html#dynamic-roles]角色解析器或自定义远程方法,并启用修改,如果经过身份验证的用户是记录的所有者。 – javadib
你检查过数据库是否有正确的外键数据? –
@EbrahimPasbani是的。我已经检查过了。 –