0

我有兩種模式:DomainRecord。許多記錄鏈接到一個域。域和記錄擁有其所有者。我想禁止用戶在他們不擁有的域中創建記錄。但是,如果其他人(例如超級用戶)創建它們並將所有者設置爲該特定用戶(即使他們不擁有域),他們應該能夠編輯記錄。這應該適用於管理員站點和API(rest_framework)根據規則禁止鏈接對象

我的問題是 - 實現此目標的最簡單方法是什麼?有沒有處理鏈接權限的django插件?我可以在這裏使用模型驗證器(如果是這樣 - 如何區分是否創建了一個新對象)?

回答

1

這裏的問題在於,Django Rest Framework和Django本身(通過管理員)僅在模型級別進行交互。爲了實現您的目標,我將執行以下設計:

  • 使模型知道其所有者和用戶。爲此,我會使用django-audit-log
  • 覆蓋默認模型管理器並在create方法中構建您的邏輯,其中我將查詢用戶的屬性並引發適當的異常。

這樣的設計將一些業務邏輯從控制器轉移到數據模型 - 有一些關於這種方法的好處和缺陷的爭論。但帶有下劃線的約束(Django管理員和API)是您可以放置​​它的唯一常見位置。

這是你的目標?