如何在Django中创建2级管理员用户,每个用户将仅管理他创建的用户?

use*_*424 0 django python-3.x

我需要创建1个以上的管理员用户,该用户只能向他在django中创建的用户管理角色/权限。此管理员应该只能看到他创建的用户,而不能看到其他用户创建的用户。简而言之,我希望将django用作我的客户的SaaS模型,他只能在其中管理员工/用户,这有可能吗?如何实现呢?例如。管理员A可以为其公司A创建用户并为其设置角色,管理员B可以为其公司B创建用户并设置其角色。但是同时,管理员A应该不能看到由管理员B创建的用户,反之亦然。

Muk*_*mar 6

Step-1. django-admin startproject twoadminproject

Step-2. cd twoadminproject

Step-3. python manage.py startapp twoadminapp

Step-4. Change models.py of "twoadminapp" app:

from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    created_by = models.CharField(max_length=30, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

Step-5. Change settings.py:

# Add you app in INSTALLED_APPS list

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'twoadminapp',
]

# Add one line at the end

AUTH_USER_MODEL = 'twoadminapp.User'
Run Code Online (Sandbox Code Playgroud)

Step-6. python manage.py makemigrations

Step-7. python manage.py migrate

Step-8. python manage.py createsuperuser (Execute this command twice for creating two admin users)

Step-9. Change admin.py of "twoadminapp" app:

from django.contrib import admin
from .models import User

# Register your models here.


class UserAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        users = super(UserAdmin, self).get_queryset(request)
        return users.filter(created_by=request.user.username)


admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

So, whenever you add user from admin panel, you have to fill admin username in the created by field of 'add user form' or you can initialize it in forms.py