49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""
|
|
Opslag van de aan/uit-status van modules per installatie (school).
|
|
|
|
Het register (registry.py) weet wélke modules bestaan; dit model onthoudt
|
|
of ze aan staan. Zo blijft de instelling bewaard en kan een beheerder modules
|
|
via het beheerscherm in- en uitschakelen.
|
|
"""
|
|
from django.db import models
|
|
|
|
|
|
class ModuleState(models.Model):
|
|
"""De aan/uit-status van één module."""
|
|
|
|
key = models.CharField("modulesleutel", max_length=64, unique=True)
|
|
enabled = models.BooleanField("ingeschakeld", default=False)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
verbose_name = "modulestatus"
|
|
verbose_name_plural = "modulestatussen"
|
|
ordering = ["key"]
|
|
|
|
def __str__(self) -> str:
|
|
status = "aan" if self.enabled else "uit"
|
|
return f"{self.key} ({status})"
|
|
|
|
|
|
class AuditEvent(models.Model):
|
|
"""Persistent auditspoor voor gevoelige mutaties en beheerdersacties."""
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
actor = models.CharField(max_length=150, blank=True)
|
|
action = models.CharField(max_length=80)
|
|
target = models.CharField(max_length=200, blank=True)
|
|
ip_address = models.GenericIPAddressField(null=True, blank=True)
|
|
extra = models.JSONField(default=dict, blank=True)
|
|
|
|
class Meta:
|
|
verbose_name = "audit event"
|
|
verbose_name_plural = "audit events"
|
|
ordering = ["-created_at"]
|
|
indexes = [
|
|
models.Index(fields=["-created_at"]),
|
|
models.Index(fields=["actor"]),
|
|
models.Index(fields=["action"]),
|
|
]
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.created_at:%Y-%m-%d %H:%M} {self.actor} {self.action} {self.target}".strip()
|