在Django admin中,限制非超级用户选择所有用户组/权限可以通过自定义用户管理模型来实现。以下是一种实现方式:
CustomUserAdmin
,并从django.contrib.auth.admin import UserAdmin
继承。CustomUserAdmin
中重写formfield_for_manytomany
方法,该方法用于自定义多对多字段的显示和选择行为。from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Group, Permission
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "groups" or db_field.name == "user_permissions":
# 限制非超级用户只能选择自己所属的用户组和权限
if not request.user.is_superuser:
kwargs["queryset"] = db_field.related_model.objects.filter(
id__in=request.user.groups.values_list("id", flat=True)
)
return super().formfield_for_manytomany(db_field, request, **kwargs)
admin.site.unregister(Group)
admin.site.unregister(Permission)
admin.site.register(CustomUser, CustomUserAdmin)
在上述代码中,我们重写了formfield_for_manytomany
方法,并在非超级用户访问时,将用户组和权限的选择范围限制为当前用户所属的用户组。
admin.py
中注册CustomUser
模型,并取消注册默认的Group
和Permission
模型。from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser, CustomUserAdmin)
通过以上步骤,非超级用户在Django admin中只能选择自己所属的用户组和权限,从而限制了其选择所有用户组/权限的能力。
关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议您参考腾讯云官方文档或咨询腾讯云的客服人员获取相关信息。
领取专属 10元无门槛券
手把手带您无忧上云