2009-12-01 43 views
1

我給編輯器,權限:django管理員權限 - 可以編輯用戶,但無法編輯他的權限 - 如何做到這一點?

  • 權威性|用戶|可以添加/更改用戶 - ON

  • auth |權限|可以添加/更改權限 - 關

儘管如此,編輯時,他們可以改變他們的權限(並讓自己,他們不應該做的動作)。我從2年前發現了一張票:http://code.djangoproject.com/ticket/6519,它仍然以這種方式工作。

如何允許用戶編輯(電子郵件,密碼等)但阻止權限更改?

+0

看起來你最好的選擇是尋找泰伯爾並告訴他快點修復它。 – 2009-12-01 12:12:37

回答

1

你目前的做法恐怕不行。

Django docs

如果您有權限添加用戶,你必須創建超級用戶,然後可以反過來,更改其他用戶的力量。

因此,如果您設法阻止編輯者更改權限,它將無濟於事,因爲他們仍然可以創建超級用戶。

+0

是啊,似乎很合乎邏輯:/ – zalew 2009-12-01 21:34:19

1

下面的代碼可以覆蓋formset,這實質上限制了非超級用戶編輯權限的能力。他們仍然可以創建用戶,但他們無法修改權限。他們甚至可以很好地編輯用戶。

class UserAdmin(UserAdmin): 

    def change_view(self, request, object_id): 

     # we want to limit the ability of the normal user to edit permissions. 
     if request.user.is_superuser: 
      self.fieldsets = (
       (None, {'fields': ('username', 'password')}), 
       (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), 
       (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'user_permissions')}), 
       (_('Important dates'), {'fields': ('last_login', 'date_joined')}), 
       (_('Groups'), {'fields': ('groups',)}), 
      ) 
     else: 
      self.fieldsets = (
       (None, {'fields': ('username', 'password')}), 
       (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), 
       #(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'user_permissions')}), 
       (_('Important dates'), {'fields': ('last_login', 'date_joined')}), 
       #(_('Groups'), {'fields': ('groups',)}), 
      ) 


     return super(UserAdmin, self).change_view(request, object_id, 
      ) 
相關問題