from django.conf import settings from django.db import models class ResourceGroup(models.Model): """Привязка к реальной группе AD (adminusergroup из пути URL).""" ad_group_name = models.SlugField( max_length=100, unique=True, help_text="Точное имя группы AD (cn), используется как сегмент пути в URL", ) display_name = models.CharField(max_length=200) class Meta: verbose_name = "Группа ресурсов (AD-группа)" verbose_name_plural = "Группы ресурсов (AD-группы)" def __str__(self): return self.display_name class Resource(models.Model): """Конкретный административный ресурс внутри группы.""" group = models.ForeignKey(ResourceGroup, on_delete=models.CASCADE, related_name="resources") slug = models.SlugField(max_length=100, help_text="Сегмент пути, например 'resource1'") name = models.CharField(max_length=200) description = models.TextField(blank=True) is_active = models.BooleanField(default=True) class Meta: unique_together = ("group", "slug") verbose_name = "Ресурс" verbose_name_plural = "Ресурсы" def __str__(self): return f"{self.group.ad_group_name}/{self.slug}" @property def path(self) -> str: return f"/{self.group.ad_group_name}/{self.slug}/" class AccessLog(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True) resource = models.ForeignKey(Resource, on_delete=models.SET_NULL, null=True) ip_address = models.GenericIPAddressField(null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = "Запись аудита доступа" verbose_name_plural = "Аудит доступа" ordering = ["-created_at"] def __str__(self): return f"{self.user} -> {self.resource} @ {self.created_at:%Y-%m-%d %H:%M}"