Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理面板权限:阻止用户组添加更多用户_Python_Django - Fatal编程技术网

Python Django管理面板权限:阻止用户组添加更多用户

Python Django管理面板权限:阻止用户组添加更多用户,python,django,Python,Django,我想限制我的工作者用户的管理面板-不希望他们创建用户或删除某些类型的模型,例如 下面是models.py中设置自定义用户的一些代码,以及添加用户的post\u save信号 请注意,我设置了default_permissions=(),这样用户就不会从任何权限开始,但是我授予他们name=workers组的权限,该组不包括myapp.myuser\u add,因此他们在登录管理控制台时不应该能够添加更多用户 # models.py from django.db import models fro

我想限制我的工作者用户的管理面板-不希望他们创建用户或删除某些类型的模型,例如

下面是
models.py
中设置自定义用户的一些代码,以及添加用户的
post\u save
信号

请注意,我设置了
default_permissions=()
,这样用户就不会从任何权限开始,但是我授予他们
name=workers
组的权限,该组不包括
myapp.myuser\u add
,因此他们在登录管理控制台时不应该能够添加更多用户

# models.py
from django.db import models
from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser, PermissionsMixin, Group
)
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def apply_worker_group(sender, instance=None, created=False, **kwargs):
    if instance.is_worker:
        try:
            worker_group = Group.objects.get(name='workers') 
            if instance not in worker_group.user_set.all():
                instance.groups.add(worker_group)
                instance.save()
        except Group.DoesNotExist:
            pass

class MyUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_worker = models.BooleanField(default=False)

    # ... skipping a bunch of stuff

    class Meta:
        default_permissions = () # (!) ALL USERS HAVE NO PERMS TO START

    @property
    def is_staff(self):
        # so workers can log into the admin panel
        return self.is_admin or self.is_worker
然后在my
admin.py
中:

# admin.py
from django.contrib.auth.admin import UserAdmin
from django.contrib import admin
from myapp.models import MyUser

class MyUserAdmin(UserAdmin):
    pass

class MyAdminSite(admin.AdminSite):
    pass

admin_site = MyAdminSite(name='myadmin')
admin_site.register(MyUser, MyUserAdmin)
但是,当我使用
is_worker=True
在我的超级用户帐户下创建一个用户时,我仍然可以使用创建的用户登录到管理面板并创建更多用户!这不是我想要的

对于如何使用这样的组限制用户权限,有什么建议吗