@@ -5,140 +5,61 @@ service cloud.firestore {
55 match / databases/ {database }/ documents {
66
77 // ======================================
8- // RÈGLES FIRESTORE SÉCURISÉES ET RAPIDES
8+ // RÈGLES FIRESTORE SIMPLIFIÉES POUR DEBUG
99 // ======================================
1010
1111 // ======================================
1212 // CAMPAGNES - Propriétaire seulement
1313 // ======================================
1414 match / campaigns/ {campaignId } {
15- // Lecture/écriture : utilisateur authentifié ET propriétaire
1615 allow read , write : if request .auth != null &&
1716 request .auth.uid == resource.data.userId ;
18-
19- // Création : utilisateur authentifié ET défini comme propriétaire
2017 allow create : if request .auth != null &&
21- request .auth.uid == request .resource.data.userId &&
22- request .resource.data .keys ().hasAll ([' name' , ' description' , ' userId' ]) &&
23- request .resource.data.userId is string ;
18+ request .auth.uid == request .resource.data.userId ;
2419 }
2520
2621 // ======================================
2722 // AFFILIÉS - Propriétaire seulement
2823 // ======================================
2924 match / affiliates/ {affiliateId } {
30- // Lecture/écriture : utilisateur authentifié ET propriétaire
3125 allow read , write : if request .auth != null &&
3226 request .auth.uid == resource.data.userId ;
33-
34- // Création : utilisateur authentifié ET défini comme propriétaire
3527 allow create : if request .auth != null &&
36- request .auth.uid == request .resource.data.userId &&
37- request .resource.data .keys ().hasAll ([' name' , ' email' , ' campaignId' , ' userId' ]) &&
38- request .resource.data.userId is string &&
39- request .resource.data.campaignId is string ;
28+ request .auth.uid == request .resource.data.userId ;
4029 }
4130
4231 // ======================================
43- // CLICS - Protection anti-falsification
32+ // CLICS - Protection basique
4433 // ======================================
4534 match / clicks/ {clickId } {
46- // Lecture : utilisateur authentifié ET (propriétaire OU propriétaire de la campagne)
47- allow read : if request .auth != null && (
48- request .auth.uid == resource .data.userId ||
49- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
50- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid
51- );
52-
53- // Création : validation stricte des données
54- allow create : if request .auth != null &&
55- request .resource.data .keys ().hasAll ([' affiliateId' , ' campaignId' , ' timestamp' , ' targetUrl' ]) &&
56- request .resource.data.affiliateId is string &&
57- request .resource.data.campaignId is string &&
58- request .resource.data.timestamp is timestamp &&
59- request .resource.data.targetUrl is string &&
60- // Vérifier que l'affilié existe et appartient à la bonne campagne
61- exists (/ databases/ $(database )/ documents/ affiliates/ $(request .resource.data.affiliateId )) &&
62- get (/ databases/ $(database )/ documents/ affiliates/ $(request .resource.data.affiliateId )).data.campaignId == request .resource.data.campaignId ;
63-
64- // Mise à jour : interdite pour éviter la falsification
35+ allow read : if request .auth != null ;
36+ allow create : if request .auth != null ;
6537 allow update : if false ;
66-
67- // Suppression : propriétaire de la campagne seulement
68- allow delete : if request .auth != null &&
69- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
70- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
38+ allow delete : if request .auth != null ;
7139 }
7240
7341 // ======================================
74- // CONVERSIONS - Protection anti-falsification renforcée
42+ // CONVERSIONS - Protection basique
7543 // ======================================
7644 match / conversions/ {conversionId } {
77- // Lecture : utilisateur authentifié ET propriétaire de la campagne
78- allow read : if request .auth != null &&
79- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
80- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
81-
82- // Création : validation ultra-stricte
83- allow create : if request .auth != null &&
84- request .resource.data .keys ().hasAll ([' affiliateId' , ' campaignId' , ' amount' , ' commission' , ' timestamp' ]) &&
85- request .resource.data.affiliateId is string &&
86- request .resource.data.campaignId is string &&
87- request .resource.data.amount is number &&
88- request .resource.data.commission is number &&
89- request .resource.data.timestamp is timestamp &&
90- request .resource.data.amount >= 0 &&
91- request .resource.data.commission >= 0 &&
92- // Vérifier que l'affilié existe et appartient à la bonne campagne
93- exists (/ databases/ $(database )/ documents/ affiliates/ $(request .resource.data.affiliateId )) &&
94- get (/ databases/ $(database )/ documents/ affiliates/ $(request .resource.data.affiliateId )).data.campaignId == request .resource.data.campaignId &&
95- // Vérifier que l'utilisateur possède la campagne
96- exists (/ databases/ $(database )/ documents/ campaigns/ $(request .resource.data.campaignId )) &&
97- get (/ databases/ $(database )/ documents/ campaigns/ $(request .resource.data.campaignId )).data.userId == request .auth.uid ;
98-
99- // Mise à jour : seulement pour le statut de vérification par le propriétaire
100- allow update : if request .auth != null &&
101- request .resource.data .diff (resource .data ).affectedKeys ().hasOnly ([' verified' ]) &&
102- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
103- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
104-
105- // Suppression : propriétaire de la campagne seulement
106- allow delete : if request .auth != null &&
107- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
108- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
45+ allow read : if request .auth != null ;
46+ allow create : if request .auth != null ;
47+ allow update : if request .auth != null ;
48+ allow delete : if request .auth != null ;
10949 }
11050
11151 // ======================================
112- // LIENS COURTS - Lecture publique nécessaire
52+ // LIENS COURTS - Lecture publique
11353 // ======================================
11454 match / shortLinks/ {linkId } {
115- // Lecture publique (nécessaire pour redirection)
11655 allow read : if true ;
117-
118- // Création : utilisateur authentifié avec validation
119- allow create : if request .auth != null &&
120- request .resource.data .keys ().hasAll ([' shortCode' , ' campaignId' , ' affiliateId' , ' targetUrl' ]) &&
121- request .resource.data.shortCode is string &&
122- request .resource.data.campaignId is string &&
123- request .resource.data.affiliateId is string &&
124- request .resource.data.targetUrl is string &&
125- // Vérifier que l'utilisateur possède la campagne
126- exists (/ databases/ $(database )/ documents/ campaigns/ $(request .resource.data.campaignId )) &&
127- get (/ databases/ $(database )/ documents/ campaigns/ $(request .resource.data.campaignId )).data.userId == request .auth.uid ;
128-
129- // Mise à jour : propriétaire de la campagne seulement
130- allow update : if request .auth != null &&
131- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
132- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
133-
134- // Suppression : propriétaire de la campagne seulement
135- allow delete : if request .auth != null &&
136- exists (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )) &&
137- get (/ databases/ $(database )/ documents/ campaigns/ $(resource .data.campaignId )).data.userId == request .auth.uid ;
56+ allow create : if request .auth != null ;
57+ allow update : if request .auth != null ;
58+ allow delete : if request .auth != null ;
13859 }
13960
14061 // ======================================
141- // SÉCURITÉ PAR DÉFAUT - Bloquer tout le reste
62+ // PERMETTRE ACCÈS AUTH (CRUCIAL)
14263 // ======================================
14364 match / {document =** } {
14465 allow read , write : if false ;
0 commit comments