2017-07-30 66 views
0

新的Loopback,我試圖用用戶模型和待辦事項模型做一個簡單的API。HasMany關係入口未經授權的環回

用戶模型,名爲Todoer,基於內置的用戶模型。創建一個todoer,登錄,註銷等作品就像一個魅力。 待辦事項模型基於PersistedModel暫時沒有特殊的ACL。

我做了一個屬於從的Todo模型Todoer模式關係有一個所有權。 我還做了從一個的hasMany關係Todoer到能夠通過終點GET/Todoer/{ID}檢索用戶的所有待辦事項/待辦事項

隨着記錄的一個todoer通過使用良好的令牌和身份證,我可以輕鬆地爲Todoer端點預留的記錄用戶提供響應,例如GET /Todoer/{id},因此我確信認證機制運行良好。

但是每次我想打GET /Todoer/{id}/todos時,我只會收到一條錯誤消息,告訴我沒有被授權。我總是確信我在登錄時獲得了良好的代幣和Todoer Id。

即使我在Todoer模型上做了一個大的ACL告訴所有事情,它也會發生同樣的情況。

我錯過了什麼?我不出來...

謝謝您的幫助...

+0

你可以分享你的ACL甚至整個'Todoer.json','Todo.json'文件嗎?第一眼看起來很好。訪問相關模型時,活動ACL仍然是您要呼叫的模型的一個。因此,允許所有「Todoer」應完全打開相關的「Todo」。 –

+0

好的。這是todoer。json:'{' ''name':'Todoer',' ''base「:」User「,」 ''idInjection「:true,' '」options「:{' ''validateUpsert」: TRUE' '},'' 「屬性」:{},'' 「驗證」:[],'' 「關係」:{'' 「待辦事項」:{'' 「類型」:「的hasMany 「' ' 」模型「: 」待辦事項「,' ' 」FOREIGNKEY「: 」todoerId「' '}' '},' ' 」的ACL「:[' '{' '」 存取類型「:」*「,' '」principalType「:」ROLE「,」 '「princ ipalId「: 」每個人都$「,'' 」許可「: 」允許「'' }'' ]'' 」方法「:{}'' }' – stefsouron

+0

這裏是todo.json: { 「名稱」: 「待辦事項」, 「基」: 「PersistedModel」, 「idInjection」:真, 「選項」:{ 「validateUpsert」:真 }, 「屬性」:{ 「文本「:{ 」類型「: 」串「, 」要求「:真 }, 」完成「:{ 」類型「: 」布爾「, 」默認「:假 } }, 「驗證」:[], 「關係」:{ 「todoer」:{ 「類型」: 「屬於關聯」, 「模型」: 「Todoer」, 「FOREIGNKEY」:「 todoerId」 }} , 「的ACL」:[], 「方法」:{}} – stefsouron

回答

0

你需要考慮到的帳戶的ACL內置User模型。您實際上正在運行其一般的DENY ACL規則。它優先於您的通用ALLOW ACL規則(docsACL規則優先級)。

你可以編寫更具體的ACL規則來獲得通過它(docs訪問相關模型)。

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property": "__get__todos" 
} 

另一種選擇,這可能是在這種情況下,更方便,更安全,是使用(上動態角色docs)上Todo本身就是一個動態的$owner作用。

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$owner", 
    "permission": "ALLOW" 
} 

如果你想了解什麼是您的應用程序發生關於將ACL,它是非常有用的一個DEBUG環境變量設置爲loopback:security:*,使相當廣泛的安全記錄。

+0

非常感謝,現在它完美的工作。我不明白,內置用戶模型的拒絕ACL優先於我的授權規則,然後限制訪問到GET todoers/id/todos去認證用戶,現在它正是我想要的。 Ha祝你有美好的一天! – stefsouron

+0

太棒了。如果這個答案解決了你的問題,你可以請[接受](https://stackoverflow.com/help/someone-answers)嗎? –