我想限制我的工作人员用户'管理面板 - 例如,不希望他们创建用户或删除某些类型的模型。
以下是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
在我的超级用户帐户下创建用户时,我仍然可以使用该创建的用户登录管理面板并创建更多用户!这不是我想要的。
有关如何使用此类组限制用户权限的任何建议吗?