django管理员权限 - 可以编辑用户但无法编辑他的权限 - 怎么做?

时间:2009-12-01 12:06:56

标签: python django permissions django-admin

我给了编辑这样的权限:

  • auth |用户|可以添加/更改用户 - 开启

  • auth |权限|可以添加/更改权限 - 关闭

但是,在编辑时,他们可以更改自己的权限(并允许自己不应该执行的操作)。我从2年前找到了一张票:http://code.djangoproject.com/ticket/6519它仍然可以这样工作。

如何允许用户编辑(电子邮件,密码等..)但阻止权限更改?

2 个答案:

答案 0 :(得分:1)

我害怕你当前的方法不起作用。

来自Django docs

  

如果您有权添加用户,则可以创建超级用户,然后可以更改其他用户。

因此,如果您设法阻止编辑器更改权限,那么它将无济于事,因为他们仍然可以创建可以使用的超级用户。

答案 1 :(得分: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,
            )