2017-02-16 87 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}

相關問題