shinkan-jinkendo/backend/rights_registrations/exercises.py
Lars 4130a63dfe
All checks were successful
Deploy Development / deploy (push) Successful in 44s
Test Suite / pytest-backend (push) Successful in 42s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 35s
Test Suite / playwright-tests (push) Successful in 1m51s
Implement Registry-First Approach for Rights and Capabilities Management
- Updated the capability catalog to reflect a registry-first approach, requiring modules to register rights and quotas upon implementation.
- Enhanced the backend to synchronize the rights registry with the database, ensuring only registered capabilities and features are displayed in the admin matrix.
- Modified SQL queries in the admin rights router to filter capabilities and features based on module registration.
- Updated documentation to clarify the new rights and features registry process, replacing the previous catalog-first method.
- Incremented application version to 0.8.201 and updated database schema version to 20260606084 to reflect these changes.
2026-06-07 15:36:31 +02:00

91 lines
2.4 KiB
Python

"""Übungen-Modul: nur Rechte/Kontingente mit echter Endpoint-Verdrahtung."""
from rights_registry import CapabilityRegistration, FeatureRegistration, register_capability, register_feature
_CLUB_WRITE_ROLES = (
"club_admin",
"trainer",
"content_editor",
"division_lead",
)
register_feature(
FeatureRegistration(
id="ai_calls",
name="KI-Aufrufe",
module="exercises",
category="ai",
limit_type="count",
reset_period="monthly",
default_limit=0,
description="KI-Aufrufe pro Monat (Suggest, Regenerate)",
)
)
register_capability(
CapabilityRegistration(
id="exercises.ai.suggest",
name="KI-Vorschlag Übung",
domain="exercises",
module="exercises",
linked_feature_id="ai_calls",
default_club_grants=tuple((r, "exercises.ai.suggest") for r in _CLUB_WRITE_ROLES),
)
)
register_capability(
CapabilityRegistration(
id="exercises.ai.regenerate",
name="KI neu generieren",
domain="exercises",
module="exercises",
linked_feature_id="ai_calls",
default_club_grants=tuple((r, "exercises.ai.regenerate") for r in _CLUB_WRITE_ROLES),
)
)
register_capability(
CapabilityRegistration(
id="exercises.create",
name="Übung anlegen",
domain="exercises",
module="exercises",
linked_feature_id="exercises",
default_club_grants=tuple((r, "exercises.create") for r in _CLUB_WRITE_ROLES),
)
)
register_capability(
CapabilityRegistration(
id="exercises.media.upload",
name="Übungsmedien hochladen",
domain="exercises",
module="exercises",
linked_feature_id="exercise_media",
default_club_grants=(
("club_admin", "exercises.media.upload"),
("trainer", "exercises.media.upload"),
("content_editor", "exercises.media.upload"),
),
)
)
register_feature(
FeatureRegistration(
id="exercises",
name="Übungen (Bestand)",
module="exercises",
category="content",
limit_type="count",
reset_period="never",
default_limit=0,
)
)
register_feature(
FeatureRegistration(
id="exercise_media",
name="Übungsmedien",
module="exercises",
category="media",
limit_type="count",
reset_period="never",
default_limit=0,
)
)