2009-06-20 189 views
4

我在想,如果Django管理頁面可以用於外部用戶限制出入。Django管理 - 通過用戶

比方說,我有這些模型:

class Publisher(models.Model): 
    admin_user = models.ForeignKey(Admin.User) 
    .. 

class Publication(models.Model): 
    publisher = models.ForeignKey(Publisher) 
    .. 

我不完全相信admin_user是 - 也許它可能是一個管理員用戶的電子郵件?

反正。有沒有辦法允許管理員用戶只能添加/編輯/刪除發佈者與該管理員用戶關聯的出版物?

- 謝謝! -Chris

回答

15

如果您在自己的應用程序中需要更細粒度的權限,那麼應該注意,Django的管理應用程序通過以下可以在ModelAdmin的子類上覆蓋的方法來支持此功能。需要注意的是,所有這些方法獲得當前HttpRequest對象作爲參數,允許定製基於特定身份驗證的用戶:

  • queryset(self, request):應該返回一個QuerySet中的模型對象的聯繫名單中。不存在於此QuerySet中的對象將不會顯示。如果添加對象是允許的,否則假
  • has_add_permission(self, request):應返回true。如果編輯obj是允許的,否則假
  • has_change_permission(self, request, obj=None):應返回true。如果obj爲None,應該返回True或False來表示是否允許編輯這種類型的對象(例如,False將被解釋爲表示當前用戶不允許編輯此類型的任何對象)。如果刪除obj是允許的,否則返回False
  • has_delete_permission(self, request, obj=None):應返回true。如果obj爲None,應該返回True或False來指示是否允許刪除此類型的對象(例如,如果False將被解釋爲意味着當前用戶不允許刪除此類型的任何對象)。

[django.com]

+0

+1我不知道管理員列表的queryset選項。 – SingleNegationElimination 2009-06-22 17:39:43

0

Django管理可以在一定程度上,受到限制。對於給定的用戶,首先,他們必須具有管理員權限才能登錄管理網站。擁有此標誌的任何人都可以查看所有管理頁面。如果您想限制觀看,那麼您的運氣不好,因爲那樣做沒有實現。從那裏,每個用戶都有許多權限,用於管理站點中的每個模型的創建,更新和刪除。處理此問題最方便的方法是創建組,然後爲組分配權限。

1

我看到當時有人問克里斯的回答是有用的。 但是現在差不多已經到2016年了,我想它更容易啓用Django Admin panel對最終用戶的限制訪問。

Django的認證系統提供:

組:應用標籤和權限多個用戶的通用方法。

在哪裏可以添加特定的權限,並通過管理面板或寫代碼的組適用於用戶。

將用戶添加到這些特定組後,管理員需要爲這些用戶啓用is_staff標誌。

用戶將能夠訪問管理員中的受限註冊模型。 我希望這可以幫助。