Управление несколькими типами пользователей с помощью пользовательских разрешений
У меня возникли проблемы с управлением различными типами пользователей. И мне нужно настроить панель администратора для каждого пользователя, имеющего пользовательские права. Это мой первый крупный проект, и у меня нет наставника, который мог бы меня направить.
Ниже приведены модели, с которыми я работаю. В реальных моделях больше полей.
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-операции над узлами в Восточном и Северном регионах.
Я узнал о создании пользовательских разрешений для каждого типа пользователей и могу легко создавать представления и проверять разрешения.
Но мне нужны эти возможности редактирования в панели администратора.