2013-10-04 25 views
2

我在我的項目中有一個設置應用程序,並且此應用程序使用的數據庫表中的每條記錄都代表特定的設置。 重要的是設置必須始終保持一致,所以我正在尋找方法來防止管理員面板用戶意外刪除或通過錯誤的代碼。如何防止Django中的對象被刪除?

此功能的另一種情況可能是 - 存儲在數據庫中的錯誤消息,可用於管理站點中的編輯或用於網站用戶的電子郵件模板。

我想到的可能的解決方案:
- 將每個設置存儲爲表列或多列,所以表將按列逐列擴展,而不是按行逐列擴展。優點 - 簡單,可靠,缺點 - 難看
- DB端解決方案。
- 實現某種基於對象所有權控制對CRUD操作訪問權限的權限系統,如Linux中的文件系統權限。優點 - 不那麼醜陋,從DB抽象,缺點 - 我還不知道如何爲Django實現簡單而優雅的實現。

有沒有人有更好的想法?

回答

0

我不知道我完全瞭解你的問題,但這裏有雲:

我看到保護模型被刪除的方法有兩種:

  • 覆蓋的delete()方法,並使其檢查一組強制執行所需一致性的規則。例如。如果其中一個一致性規則失敗,則引發異常以得到正確處理。
  • 另一種是通過自動化,又名permissions。您可以管理用戶必須刪除特定型號的權限,如this answer中所述。

我注意到Django默認權限API不支持特定對象的權限,只有權限適用於模型。但是,有第三方應用程序提供此功能,例如this one

2

簡短的回答是:如果你不想讓別人擁有某些數據庫能力,不要授予他們。看起來你認爲有管理面板超級用戶和其他人。

Django允許更多fine grained control over Users, Permissions, Authorization, and even Admin Panel權限。事實上,當文檔做得如此出色時,在這裏詳細闡述了太多的控制。

+0

如果管理員技術上不識字(不僅pythonistas使用網站)會怎麼樣?或者如果在部署過程中某些數據會變得不一致,可能會導致功能降級。 –

+0

我的意思不是輕視,但是很難編碼像「管理員不稱職」這樣的社會問題。這些問題對技術解決方案具有很強的抵抗力。 – msw

0

在Django中沒有真正的內置方式(我知道)可以防止「意外刪除」。如果您使用的是管理員,只要您想刪除可幫助遏制潛在問題的記錄,他們就會提供確認頁面。正如@msw所提到的,用戶身份驗證系統旨在幫助您強制執行權限,但如果個人擁有適當的權限,則不會防止意外刪除...

...另一種策略是防止完全刪除數據庫(在Web應用程序級別)。您可以通過標記和過濾掉任何「已刪除」記錄給用戶,從用戶的角度給出刪除的「幻覺」。這樣,恢復信息就像切換/重置記錄中的標誌一樣簡單。你將不得不重寫正確的deletion signals

+0

另一種策略(雖然很聰明)在實踐中似乎真的很可怕:「但是我刪除了那個條目!? !「」不,它只是看起來像你把它刪除給你,我看到它很好。 「哎呀!」 (±0) – msw

+0

如果系統的用戶知道實現細節,那麼這是一個潛在的問題。我認爲你會發現它是一個長期受歡迎的功能。想象一下它同時解決的其他問題(即一個心懷不滿的員工在他們的權限中猖獗,在他們辭職前一天刪除了他們所能做的一切)。這應該不會比保留文件副本的文件備份系統更可怕,即使它在備份的系統上被刪除。 –