roosterwijs/backend/plugins/models.py
bes-r c845588e5e
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
Add roles modules audit logging and CI
2026-07-04 23:01:06 +02:00

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()