Feature: Subscription-Tier-System (standard/pro/breeder + _test), has_pro_access(), Admin-Tier-UI (SW by-v734)

This commit is contained in:
rene 2026-05-06 18:39:27 +02:00
parent bcc7c27556
commit 71f29dcce0
8 changed files with 104 additions and 12 deletions

View file

@ -87,7 +87,7 @@ def get_current_user(
user_id = int(payload["sub"])
with db() as conn:
row = conn.execute(
"SELECT id, email, name, rolle, is_premium, is_moderator, is_banned, ban_reason, is_social_media, notes_ki_enabled, gassi_stunde_push, breeder_status, is_founder, is_partner, founder_number, email_verified, luna_trial_until FROM users WHERE id=?",
"SELECT id, email, name, rolle, is_premium, is_moderator, is_banned, ban_reason, is_social_media, notes_ki_enabled, gassi_stunde_push, breeder_status, is_founder, is_partner, founder_number, email_verified, luna_trial_until, subscription_tier FROM users WHERE id=?",
(user_id,)
).fetchone()
@ -130,6 +130,32 @@ def require_admin(user=Depends(get_current_user)):
return user
def has_pro_access(user: dict) -> bool:
"""True wenn User Pro-Features nutzen darf."""
if not user:
return False
role = user.get("rolle", "user")
tier = user.get("subscription_tier", "standard")
if role in ("admin", "moderator"):
return True
if user.get("is_moderator") or user.get("is_social_media"):
return True
return tier in ("pro", "breeder", "pro_test", "breeder_test")
def has_breeder_access(user: dict) -> bool:
"""True wenn User Züchter-Features nutzen darf."""
if not user:
return False
role = user.get("rolle", "user")
tier = user.get("subscription_tier", "standard")
if role in ("admin", "moderator"):
return True
if user.get("is_moderator") or user.get("is_social_media"):
return True
return tier in ("breeder", "breeder_test") or role == "breeder"
def require_social_media(user=Depends(get_current_user)):
"""Dependency: Social-Media-Manager, Luna-Probezugang oder Admin."""
from datetime import datetime as _dt