2015-05-05 72 views
0


我有關於權限的問題。我希望將通過國家標記爲員工(並且可以進入管理頁面)的用戶分開。例如,來自荷蘭的管理員只能查看和編輯來自荷蘭的用戶。什麼是最好的方法來做到這一點?
我應該以某種方式製作查詢,以便用戶只能看到來自其國家的用戶,並且我可以用權限對其進行自定義嗎?
Django權限按國家/地區分開用戶

我的models.py定義一個國家

class UserProfile(models.Model): 

    user = models.OneToOneField(User, related_name='profile', unique=True) 
    country = models.CharField("Country", max_length=150, blank=False) 

,我在admin.py

def queryset(self, request): 
    qs = super(ProfileAdmin, self).queryset(request) 
    if request.user.is_superuser: 
     return qs 
    return qs.filter(country=request.user.country) 

回答

0

想過這樣的事情你在正確的方向所思所想。這是過濾管理員可見的對象的正確方法。

小更正:該方法的名稱是get_queryset()和訪問用戶的國家,你應該使用profile關係:

def get_queryset(self, request): 
    qs = super(ProfileAdmin, self).get_queryset(request) 
    if request.user.is_superuser: 
     return qs 
    return qs.filter(country=request.user.profile.country) 

UPDATE:要在標準User管理員必須更換過濾用戶UserAdmin與你自己的子類:

from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 

class MyUserAdmin(UserAdmin): 

    def get_queryset(self, request): 
     qs = super(MyUserAdmin, self).get_queryset(request) 
     if request.user.is_superuser: 
      return qs 
     return qs.filter(profile__country=request.user.profile.country) 

admin.site.unregister(User) 
admin.site.register(User, MyUserAdmin) 
+0

我試過你的代碼,並在運行中遇到了一些問題,以及我已經用OneToOne關係附帶UserProfile,我想精確地過濾屬於UserProfile的字段,而不是標準的User模型,並且代碼在這裏似乎不適用於我。由於用戶模型已擴展,我仍然可以調用像'country = request.user.profile.country'這樣的字段,至少我認爲是這樣。可能是我的管理員仍然看到admintool中的所有用戶的問題? – Vollmilchbb

+0

如果您以超級用戶身份登錄,您將看到所有'UserProfile'。 – catavaran

+0

你想過濾'UserProfile'管理員或標準'User'模型管理員嗎? – catavaran

相關問題