2011-12-05 49 views
8

我正在尋找一種方法來自定義Django管理以支持基於用戶組的權限。django admin - 組編輯或查看模型的權限

例如,我剛剛創建了Developers組,現在我還創建了Tickets模型,並使用AdminModel指定如何列出數據。

我想讓這個模型只能由開發者看到,並且隱藏在彼此中而不在這個組中(例如基於組過濾視圖)。 我讀過很多文檔,但無法真正找到並理解如何使其工作。

爲了安全起見,我還需要在運行時爲特定模型(我向開發人員組以外的人隱藏的對象)添加刪除對象時檢查用戶組,否則它只需要知道使用模型的URL:s

它看起來像一個簡單的任務,但也許我失去了一些東西......任何第三方中間件,或只是一種方式來做到這一點?如果需要,我也準備編輯管理視圖,但我需要知道該怎麼做。

謝謝:-)

回答

12

ModelAdmin有三種方法處理用戶權限:has_add_permissionhas_change_permissionhas_delete_permission。所有三個應該返回布爾值(True/False)。

所以,你可以這樣做:

class TicketAdmin(admin.ModelAdmin): 
    ... 
    def has_add_permission(self, request): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_change_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_delete_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

False可以從這些之一返回,它的業績在403禁止。

+0

酷!不知道自定義權限處理有一個簡單的管理鉤子! –

+0

哇!這似乎很容易進行:-) 類似的問題沒有得到一個這麼容易理解的解決方案。 非常感謝你! –

+0

驚人的是指出我正在工作 –