- infrasynth.configs: typed multi-tenant config store (registry, service, secrets, cache) + public config_changed/config_reset signals and API - emit the declared-but-dead signals (features flags/overrides, scheduler task_completed/task_failed, tenancy tenant_updated, audit model_changed) and per-model audit field exclusions - security: permission catalog (security_permission), Django-style model-derived AutoPermission, PermissionRegistry, RoleAssignment, global-or-tenant Grant/Revoke, catalog API - consolidate the permission surface: PermissionRegistry only (drop the settings dict), IsAuthenticatedAndPermitted aliases HybridPermission, require_permission replaced by required_permissions + require_all - packaging: add [build-system]; add Forgejo publish workflow (.forgejo)
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
|
|
|
|
from infrasynth.security.permissions import IsAuthenticatedAndPermitted
|
|
|
|
from .filters import (
|
|
ChannelConfigFilter,
|
|
NotificationDispatchFilter,
|
|
NotificationTemplateFilter,
|
|
)
|
|
from .models import ChannelConfig, NotificationDispatch, NotificationTemplate
|
|
from .serializers import (
|
|
ChannelConfigSerializer,
|
|
NotificationDispatchSerializer,
|
|
NotificationTemplateSerializer,
|
|
)
|
|
|
|
|
|
class NotificationTemplateViewSet(ModelViewSet):
|
|
queryset = NotificationTemplate.objects.all()
|
|
serializer_class = NotificationTemplateSerializer
|
|
permission_classes = [IsAuthenticatedAndPermitted]
|
|
filterset_class = NotificationTemplateFilter
|
|
|
|
def get_queryset(self):
|
|
return NotificationTemplate.objects.all()
|
|
|
|
|
|
class NotificationDispatchViewSet(ReadOnlyModelViewSet):
|
|
queryset = NotificationDispatch.objects.select_related("template")
|
|
serializer_class = NotificationDispatchSerializer
|
|
permission_classes = [IsAuthenticatedAndPermitted]
|
|
filterset_class = NotificationDispatchFilter
|
|
|
|
def get_queryset(self):
|
|
return NotificationDispatch.objects.select_related("template")
|
|
|
|
|
|
class ChannelConfigViewSet(ModelViewSet):
|
|
queryset = ChannelConfig.objects.all()
|
|
serializer_class = ChannelConfigSerializer
|
|
permission_classes = [IsAuthenticatedAndPermitted]
|
|
filterset_class = ChannelConfigFilter
|
|
|
|
def get_queryset(self):
|
|
return ChannelConfig.objects.all()
|