Files
Test1/django_app/portal/models.py
T

57 lines
2.1 KiB
Python
Raw Normal View History

2026-08-31 16:18:11 +03:00
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}"