2010-05-18 103 views
9

我不知道這是否是一個錯誤或我只是失去了一些東西(雖然我已經解析關於內聯的文檔),但:Django的內聯用戶權限+視圖 - 權限問題

比方說,我有一個模型A.模型A是模型B的內聯。用戶U對模型B具有完全訪問權限,但只是將權限更改爲模型A(所以不添加,也不刪除)。

但是,編輯模型B時,用戶U仍然可以在底部看到「添加另一個A」鏈接,儘管U沒有爲該模型添加權限。

怎麼了?爲什麼該鏈接繼續顯示?我的邏輯說,如果U沒有權限添加A,則該鏈接不應再出現。另外,理想情況下,我想給予U模型A的唯一視圖權利(所以不需要添加,刪除或更改 - 只能查看),但是我已經閱讀了關於這個(奇怪的,如果你問我)哲學「如果你不信任你,只要他拒絕他們進入管理區域」。一種愚蠢的教義。

現在,我試圖通過只更改權限並將所有字段設置爲只讀來保留U來模擬「僅查看權限」。但我認爲這是一種愚蠢的做法,也可能導致像上面的權限問題...

像我這樣的平均Django程序員如何實現僅查看權限,最重要的是我該如何擺脫管理員編輯表單底部的「添加其他A」鏈接?

在此先感謝!

+0

這裏有個大問題:你如何定義這個「用戶X對對象Y具有隻讀訪問權限」? perms框架更適合您編寫自己的代碼來檢查和驗證用戶對某些對象的操作。請閱讀[permission_required] [1]裝飾器以瞭解更多信息。管理員本身不會奇蹟般地猜測用戶X不能創建Y對象,並隨後刪除「添加Y」選項。 [1]:http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.decorators。permission_required – dguaraglia 2010-06-04 12:17:46

+0

如果您有一些樣本模型和modeladmin類,閱讀該問題會更容易 – 2010-06-25 23:18:22

回答

2

如果我想要管理員中的內容的只讀版本,我只需編寫一些正常的Django視圖並將其保留在管理員之外。

我不認爲你正在談論的事情(允許對對象進行更改,而不是內聯對象)真的受到管理員的支持。不要誤解我的意思:管理員非常靈活有用,但並不是要爲你做所有事情。

我看你能有在管理這麼多控制的唯一辦法就是不要內嵌A.

「如果你不信任U,只是拒絕他進入管理區的所有一起」。一種愚蠢的教義。

不是真的,當你考慮到管理員不打算有安全強化,以保證訪問控制是細粒度水平所需的水平。由於管理員的開放性和可擴展性,管理員中有許多地方可能存在bug(通常是用戶編寫的代碼),這些bug可能會被不良行爲者利用。這就是爲什麼不受信任的用戶應該總是看到所有管理URL返回404.

無論如何,當訪問控制要求細化時,一般(即django.contrib)解決方案將不太適合。