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
- 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.
91 lines
2.4 KiB
Python
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,
|
|
)
|
|
)
|