Управление несколькими типами пользователей с помощью пользовательских разрешений

У меня возникли проблемы с управлением различными типами пользователей. И мне нужно настроить панель администратора для каждого пользователя, имеющего пользовательские права. Это мой первый крупный проект, и у меня нет наставника, который мог бы меня направить.

Ниже приведены модели, с которыми я работаю. В реальных моделях больше полей.

class User(AbstractUser):
    '''
    Regional Admin and Admin can login to the admin panel.
    Regional Admin can only access the nodes data of regions they are assigned to.
    '''
    class UserTypeChoices(models.TextChoices):
        ADMIN = 'ADMIN', 'Admin'
        REGIONAL_ADMIN = 'REGIONAL_ADMIN', 'Regional Admin'
        NORMAL_USER = 'NORMAL_USER', 'Noramal User'

    email = models.EmailField(unique=True, validators=[EmailValidator(message="Invalid Email Address")])
    user_type = models.CharField(max_length=20, choices=UserTypeChoices.choices, default=UserTypeChoices.NORMAL_USER)

    def __str__(self) -> str:
        return self.username

# Country Model
class Country(models.Model):
    name = models.CharField(max_length=100, unique=True)
    population = models.PositiveBigIntegerField(validators=[MinValueValidator(0)], default=0)

    class Meta:
        verbose_name_plural = "Countries"

    def __str__(self) -> str:
        return self.name

# Each country might be divided into one or more zones
class Region(models.Model):
    country = models.ForeignKey(Country, on_delete=models.CASCADE)
    name = models.CharField(max_length=100) # East West North South

    def __str__(self) -> str:
        return self.name

# Each nodes represents some point in a particular region
class Node(models.Model):
    region = models.ForeignKey(Region, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    length = models.FloatField(validators=[MinValueValidator(0)])

    def __str__(self) -> str:
        return self.name

Администратор здесь является суперпользователем, а региональный администратор - это штатный пользователь, который может войти в панель администратора. Каждый региональный пользователь может получить доступ к региональным данным узла.

Я хочу связать регионы с пользователями.

Пусть в таблице регионов есть четыре региона: Восток, Запад, Север и Юг, и каждый узел относится к одному из регионов.

Если региональный пользователь имеет доступ к определенному региону, он может выполнять CRUD-операции над узлами в этом регионе. Один региональный администратор может иметь доступ к нескольким регионам.

Например, если региональный пользователь имеет право доступа к узлам в Восточном и Северном регионах, он может выполнять CRUD-операции над узлами в Восточном и Северном регионах.

Я узнал о создании пользовательских разрешений для каждого типа пользователей и могу легко создавать представления и проверять разрешения.

Но мне нужны эти возможности редактирования в панели администратора.

Вернуться на верх