test repo
This commit is contained in:
1 parent
7c0a85f00f
commit
1eff3aa2ea
27 files changed
+1161
-322
No files matched your search
@@ -0,0 +1,57 @@
|
||||
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}"
|
||||
Reference in new issue
Block a user