@@ -5,84 +5,115 @@ service cloud.firestore {
55 match / databases/ {database }/ documents {
66
77 // ======================================
8- // RÈGLES SIMPLIFIÉES ET PERMISSIVES
8+ // RÈGLES FIRESTORE CORRIGÉES ET OPTIMISÉES
99 // ======================================
1010
11- // Règle générale : utilisateur authentifié peut accéder à SES données
12- match / {collection }/ {document } {
13- // Lecture/écriture : utilisateur authentifié ET c'est ses propres données
14- allow read , write : if request .auth != null &&
15- (request .auth.uid == resource .data.userId ||
16- request .auth.uid == request .resource.data.userId );
17- }
18-
1911 // ======================================
20- // RÈGLES SPÉCIFIQUES POUR LES CAMPAGNES
12+ // CAMPAGNES - Accès utilisateur seulement
2113 // ======================================
2214 match / campaigns/ {campaignId } {
23- allow read , write : if request .auth != null &&
24- (request .auth.uid == resource .data.userId ||
25- request .auth.uid == request .resource.data.userId );
15+ // Lecture : utilisateur authentifié ET propriétaire
16+ allow read : if request .auth != null &&
17+ request .auth.uid == resource.data.userId ;
18+
19+ // Création : utilisateur authentifié ET défini comme propriétaire
20+ allow create : if request .auth != null &&
21+ request .auth.uid == request .resource.data.userId ;
22+
23+ // Mise à jour : utilisateur authentifié ET propriétaire existant
24+ allow update : if request .auth != null &&
25+ request .auth.uid == resource.data.userId ;
26+
27+ // Suppression : utilisateur authentifié ET propriétaire
28+ allow delete : if request .auth != null &&
29+ request .auth.uid == resource.data.userId ;
2630 }
2731
2832 // ======================================
29- // RÈGLES POUR LES AFFILIÉS
33+ // AFFILIÉS - Accès utilisateur seulement
3034 // ======================================
3135 match / affiliates/ {affiliateId } {
32- allow read , write : if request .auth != null &&
33- (request .auth.uid == resource .data.userId ||
34- request .auth.uid == request .resource.data.userId );
36+ // Lecture : utilisateur authentifié ET propriétaire
37+ allow read : if request .auth != null &&
38+ request .auth.uid == resource.data.userId ;
39+
40+ // Création : utilisateur authentifié ET défini comme propriétaire
41+ allow create : if request .auth != null &&
42+ request .auth.uid == request .resource.data.userId ;
43+
44+ // Mise à jour : utilisateur authentifié ET propriétaire existant
45+ allow update : if request .auth != null &&
46+ request .auth.uid == resource.data.userId ;
47+
48+ // Suppression : utilisateur authentifié ET propriétaire
49+ allow delete : if request .auth != null &&
50+ request .auth.uid == resource.data.userId ;
3551 }
3652
3753 // ======================================
38- // RÈGLES PERMISSIVES POUR LES CLICS ET CONVERSIONS
54+ // CLICS - Plus permissif pour le tracking
3955 // ======================================
4056 match / clicks/ {clickId } {
41- // Lecture : propriétaire de la campagne
57+ // Lecture : tous les utilisateurs authentifiés
4258 allow read : if request .auth != null ;
4359
44- // Création/mise à jour : plus permissif pour le tracking
45- allow create , update : if request .auth != null ;
60+ // Création : tous les utilisateurs authentifiés (pour tracking public)
61+ allow create : if request .auth != null ;
62+
63+ // Mise à jour : propriétaire seulement
64+ allow update : if request .auth != null &&
65+ request .auth.uid == resource.data.userId ;
4666
4767 // Suppression : propriétaire seulement
4868 allow delete : if request .auth != null &&
4969 request .auth.uid == resource.data.userId ;
5070 }
5171
72+ // ======================================
73+ // CONVERSIONS - Plus permissif pour le tracking
74+ // ======================================
5275 match / conversions/ {conversionId } {
53- // Lecture : propriétaire de la campagne
76+ // Lecture : tous les utilisateurs authentifiés
5477 allow read : if request .auth != null ;
5578
56- // Création/mise à jour : plus permissif pour le tracking
57- allow create , update : if request .auth != null ;
79+ // Création : tous les utilisateurs authentifiés (pour tracking public)
80+ allow create : if request .auth != null ;
81+
82+ // Mise à jour : propriétaire seulement
83+ allow update : if request .auth != null &&
84+ request .auth.uid == resource.data.userId ;
5885
5986 // Suppression : propriétaire seulement
6087 allow delete : if request .auth != null &&
6188 request .auth.uid == resource.data.userId ;
6289 }
6390
6491 // ======================================
65- // RÈGLES PERMISSIVES POUR LES LIENS COURTS
92+ // LIENS COURTS - Lecture publique nécessaire
6693 // ======================================
6794 match / shortLinks/ {linkId } {
68- // Lecture publique (nécessaire pour redirection)
95+ // Lecture publique (pour redirection)
6996 allow read : if true ;
7097
71- // Création/mise à jour : utilisateur authentifié
72- allow create , update : if request .auth != null ;
98+ // Création : utilisateur authentifié
99+ allow create : if request .auth != null ;
100+
101+ // Mise à jour : propriétaire seulement
102+ allow update : if request .auth != null &&
103+ request .auth.uid == resource.data.userId ;
73104
74105 // Suppression : propriétaire seulement
75106 allow delete : if request .auth != null &&
76107 request .auth.uid == resource.data.userId ;
77108 }
78109
79110 // ======================================
80- // RÈGLE DE SÉCURITÉ DE BASE
111+ // SÉCURITÉ PAR DÉFAUT
81112 // ======================================
82113
83- // Bloquer l'accès non authentifié par défaut
114+ // Bloquer tout le reste
84115 match / {document =** } {
85- allow read , write : if request .auth != null ;
116+ allow read , write : if false ;
86117 }
87118 }
88119}
0 commit comments