如何限制 Django 管理中的非超级用户选择所有用户 groups/permissions?
How do I restrict non-superuser users in Django admin from choosing all user groups/permissions?
我能够禁用表单字段,但用户仍然可以使用 Choose all
来 select 所有组或所有权限。我怎样才能 disable/remove Choose all
为员工用户?
我需要这个的原因是因为我希望一些员工能够更改用户 Personal Info
但不能更改 Permissions
或 Important dates
部分。
这是我目前使用的代码:
class UserAdmin(BaseUserAdmin):
inlines = (AccountInline, )
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
is_superuser = request.user.is_superuser
disabled_fields = set() # type: Set[str]
# Prevent non-superusers from editing their own permissions
if not is_superuser:
disabled_fields |= {
'username',
'is_staff',
'is_superuser',
'user_permissions',
'groups',
'last_login',
'date_joined',
}
for f in disabled_fields:
if f in form.base_fields:
form.base_fields[f].disabled = True
return form
您是否尝试过在 UserAdmin
中重新定义 get_fieldsets
?像
class UserAdmin(BaseUserAdmin):
....
def get_fieldsets(self, request, obj=None):
if not request.user.is_superuser:
return [(None, {'fields': ('your_editable_fields',)}),]
else:
return self.fieldsets
稍微修改一下,它允许我只为超级用户表单保留某些字段。
我能够禁用表单字段,但用户仍然可以使用 Choose all
来 select 所有组或所有权限。我怎样才能 disable/remove Choose all
为员工用户?
我需要这个的原因是因为我希望一些员工能够更改用户 Personal Info
但不能更改 Permissions
或 Important dates
部分。
这是我目前使用的代码:
class UserAdmin(BaseUserAdmin):
inlines = (AccountInline, )
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
is_superuser = request.user.is_superuser
disabled_fields = set() # type: Set[str]
# Prevent non-superusers from editing their own permissions
if not is_superuser:
disabled_fields |= {
'username',
'is_staff',
'is_superuser',
'user_permissions',
'groups',
'last_login',
'date_joined',
}
for f in disabled_fields:
if f in form.base_fields:
form.base_fields[f].disabled = True
return form
您是否尝试过在 UserAdmin
中重新定义 get_fieldsets
?像
class UserAdmin(BaseUserAdmin):
....
def get_fieldsets(self, request, obj=None):
if not request.user.is_superuser:
return [(None, {'fields': ('your_editable_fields',)}),]
else:
return self.fieldsets
稍微修改一下,它允许我只为超级用户表单保留某些字段。