2017-02-10 113 views
1

我正在使用loopback爲SPA網站創建一個簡單的API。我想保持我的權限盡可能的簡單,所以我結束了接下來的ACL模型用戶模型的loopback ACL

  • 所有權限默認情況下拒絕
  • 幾種型號的一些方法是允許大家
  • 所有的方法都是允許任何授權用戶使用

如果我將創建多個用戶,並且沒有人能夠創建或修改用戶,這顯然會起作用。由於我無法明確更改內置User模型的權限,因此我創建了一個admin模型,該模型擴展了User。然後我將User模型的public屬性設置爲false。我設置了以下ACL規則

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "DENY" 
}, 
{ 
    "accessType": "EXECUTE", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property": "login" 
}, 
{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$authenticated", 
    "permission": "ALLOW" 
} 

在我看來,它應該拒絕比login其他任何方法的任何unathorized用戶訪問。

不幸的是,它不是如何工作,任何人仍然可以POST /用戶和創建新用戶。我的猜測是ACL規則不適用於繼承模型,因此在這裏應用User的規則。所以我回到了原點,我不能直接更改User權限或覆蓋它們。

我在這裏有什麼選擇?有沒有辦法阻止創建新用戶?

回答

1

事實證明,規則的細節比繼承關係更重要。在這種情況下,User模型定義了一個專門用於create屬性的規則。即使拒絕規則是在擴展的admin模型中定義的,該規則優先於更普通的拒絕每個屬性。所以我必須從User模型中取得所有允許的規則,並在admin中明確拒絕。