首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何限制Django admin中的非超级用户选择所有用户组/权限?

在Django admin中,限制非超级用户选择所有用户组/权限可以通过自定义用户管理模型来实现。以下是一种实现方式:

  1. 创建一个新的用户管理模型,例如CustomUserAdmin,并从django.contrib.auth.admin import UserAdmin继承。
  2. CustomUserAdmin中重写formfield_for_manytomany方法,该方法用于自定义多对多字段的显示和选择行为。
代码语言:txt
复制
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方法,并在非超级用户访问时,将用户组和权限的选择范围限制为当前用户所属的用户组。

  1. admin.py中注册CustomUser模型,并取消注册默认的GroupPermission模型。
代码语言:txt
复制
from django.contrib import admin
from .models import CustomUser

admin.site.register(CustomUser, CustomUserAdmin)

通过以上步骤,非超级用户在Django admin中只能选择自己所属的用户组和权限,从而限制了其选择所有用户组/权限的能力。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议您参考腾讯云官方文档或咨询腾讯云的客服人员获取相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券