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

时间:2016-10-10 05:25:12

标签: python django

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

以下是models.py中设置我的自定义用户的一些代码,以及用于添加用户的post_save信号。

请注意,我设置default_permissions = ()以便用户不会以任何权限开头,但我授予他们name=workers不包含myapp.myuser_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

然后在我的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在我的超级用户帐户下创建用户时,我仍然可以使用该创建的用户登录管理面板并创建更多用户!这不是我想要的。

有关如何使用此类组限制用户权限的任何建议吗?

0 个答案:

没有答案