Как создать 2 пользователей-администраторов в Django, где каждый пользователь будет администрировать только тех пользователей, которых он создает? - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно создать более 1 администратора, который может управлять ролями / разрешениями только для тех пользователей, которых он создает в django. Этот администратор должен видеть только тех пользователей, которых он создает, а не пользователей, созданных другим пользователем. Короче говоря, я хочу использовать django в качестве модели SaaS для своих клиентов, где он может администрировать только своих сотрудников / пользователей. Возможно ли это и как именно это можно реализовать? Например. Администратор A может создавать пользователей для своей компании A и устанавливать для них роли, администратор B может создавать пользователей для своей компании B и устанавливать их роли. Но в то же время администратор А не должен видеть пользователей, созданных администратором Б, и наоборот.

1 Ответ

3 голосов
/ 13 ноября 2019

Шаг-1. django-admin startproject twoadminproject

Шаг 2. cd twoadminproject

Шаг-3. python manage.py startapp twoadminapp

Шаг 4. Измените models.py приложения "twoadminapp":

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)

Шаг 5. Измените 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'

Шаг 6. python manage.py makemigrations

Шаг-7. python manage.py migrate

Шаг-8. python manage.py createsuperuser (выполнить эту команду дважды для создания двух пользователей с правами администратора)

Шаг-9. Измените admin.py приложения «twoadminapp»:

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)

Таким образом, всякий раз, когда вы добавляете пользователя из панели администратора, вам необходимо заполнить имя пользователя admin в созданном поле «add user form» или вы можете инициализироватьэто в forms.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...