Files
Forge-Engine/routes/games/games_new.py
T
william 7ebc9b143f
Build and deploy / test-python (push) Successful in 9m39s
Build and deploy / test-js (push) Successful in 52s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Corrige une faille d'isolation entre comptes et retire l'email des chemins de projet
Le rôle "admin" contournait entièrement l'isolation par projet
(core/auth_guard.py) : il pouvait ouvrir/modifier/supprimer le jeu de
n'importe quel autre compte en connaissant son slug, et la page d'accueil
listait sans filtrage tous les projets de tous les comptes.

- La propriété d'un projet se vérifie désormais sur le segment
  "propriétaire" du slug (id du compte), pour tous les rôles y compris
  admin — un slug "à plat" (sans compte associé) reste réservé à
  l'admin, comportement historique conservé pour ce cas précis.
- routes/games/index.py ne liste plus que les projets du compte connecté.
- Le dossier propriétaire d'un projet est maintenant l'id numérique du
  compte, plus jamais son email slugifié (visible en clair dans chaque
  URL auparavant) — script de migration fourni et déjà exécuté sur les
  données existantes.
- Changer d'email ne renomme plus aucun dossier (n'en dépend plus).
- Deux nouveaux tests de régression, fixtures corrigées en conséquence.
- README réécrit pour refléter l'état actuel du produit (jeu 2D
  uniquement, plus de traces de l'ancien éditeur "document").
2026-09-04 22:52:05 +02:00

24 lines
1005 B
Python

from flask import g, request, redirect, url_for
import db
from core.flask_app import app
@app.route("/games/new", methods=["POST"])
def games_new():
name = request.form.get("name", "").strip()
if not name:
return redirect(url_for("index"))
# Fusion des moteurs (voir screens/screens_repo/ensure_schema.py) : un
# jeu n'a plus de type propre — aucun écran créé d'office ici, comme
# avant (l'admin en crée via "+ Nouvel écran" dans le dashboard, en
# choisissant "document" ou "jeu_2d" pour chacun).
# owner_folder (voir db/games/project_slug.py — structure de dossiers
# par utilisateur) : l'id du compte, JAMAIS son email — opaque, ne
# révèle rien du compte propriétaire dans les slugs/URLs (voir
# scripts/migrate_owner_folders_to_user_id.py pour les projets déjà
# existants avec l'ancien schéma).
slug = db.create_game(name, owner_folder=str(g.current_user["id"]))
return redirect(url_for("game_dashboard", slug=slug))