2017-02-16 48 views
0

我是新来的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" 
    } 

当我尝试一个补丁请求时,所有者客户的请求被成功执行。但是,业主员工的请求会得到'授权错误'。

我在做什么错在这里?

+0

你检查过数据库是否有正确的外键数据? –

+0

@EbrahimPasbani是的。我已经检查过了。 –

回答

2

环回文件寄存器是最近更新的,他们已经在通知中加入以下两行:(http://loopback.io/doc/en/lb3/Using-built-in-models.html#user-model

环回做在单个应用程序中不支持基于User模型的多个模型。也就是说,您不能在单个应用程序中使用内置User模型派生出多个模型。

所以基本上,我不应该创建两个不同的模型,这些模型是基于'用户'模型。 :(

0

环回仅检查一个所有者关系here

两年主人,你需要编写自己的自定义角色和role resolver

+1

谢谢你的回复。我会尝试使用角色解析器。 –

0

回环说,你要一个从用户模式扩展模型,定义角色(从角色模型),并通过RoleMapping模型分配角色的任何用户或参与者(它内置的模型)。

例如:

  1. 从用户模型扩展模型,并命名MYUSER
  2. 创建 '客户' 和 '员工' 的角色
  3. 添加关系:。

    "customer": { "type": "belongsTo", "model": "MyUser", "foreignKey": "customerId" }, "employee": { "type": "belongsTo", "model": "MyUser", "foreignKey": "employeeId" }

  4. 在MYUSER模型,添加以下ACL:

    { "accessType": "WRITE", "principalType": "ROLE", "principalId": "Customer", "permission": "ALLOW" }, { "accessType": "WRITE", "principalType": "ROLE", "principalId": "Employee", "permission": "ALLOW" }

+0

谢谢你的回答。但是,在这个解决方案中,任何“客户”都可以编辑任何记录。仅当用户标识与特定记录相关联时,$ owner角色才允许。 –

+0

对!您可以[https://loopback.io/doc/en/lb3/Defining-and-using-roles.html#dynamic-roles]角色解析器或自定义远程方法,并启用修改,如果经过身份验证的用户是记录的所有者。 – javadib

0

按照this commit(于2017年9月28日发布的环回3.13.0),您可以设置{ownerRelations: true}

相关问题