2009-12-01 135 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, 
      )