pub async fn verify_technical_spec_org_access(
user: &AuthenticatedUser,
spec_id: Uuid,
spec_use_cases: &TechnicalSpecUseCases,
acp_use_cases: &AcpUseCases,
) -> Result<(), AppError>Expand description
Vérifie le mandat de l’appelant sur l’ACP d’une fiche technique.
── Pourquoi l’ACP, et non l’immeuble ─────────────────────────────────────
TechnicalSpec porte acp_id: Uuid obligatoire et
building_id: Option<Uuid>. Une fiche peut donc concerner l’ACP entière
sans viser un immeuble précis — un marché d’entretien couvrant tout le
patrimoine, par exemple.
Remonter par l’immeuble aurait laissé sans contrôle toutes les fiches dont il est absent. Le périmètre juste est celui que l’entité rend obligatoire, et c’est l’ACP.
C’est le genre de choix qu’on ne peut pas recopier d’un garde voisin : les onze autres remontent à l’immeuble parce que leurs entités le portent toujours. Ici, suivre le modèle aurait produit un trou pour les fiches sans immeuble — soit exactement les plus larges (#772).