-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirestore.rules
More file actions
133 lines (108 loc) · 5.61 KB
/
Copy pathfirestore.rules
File metadata and controls
133 lines (108 loc) · 5.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Règles pour la collection users
match /users/{userId} {
// Permettre la lecture à tous (public) pour les pages de profil publiques
allow read: if true;
// Permettre la création si l'utilisateur crée son propre document
allow create: if request.auth != null && request.auth.uid == userId;
// Permettre la modification seulement au propriétaire du document
allow update: if request.auth != null && request.auth.uid == userId;
// Permettre la suppression seulement au propriétaire du document
allow delete: if request.auth != null && request.auth.uid == userId;
}
// Règles pour la collection projects
match /projects/{projectId} {
// Permettre la lecture à tous (public) pour la page d'exploration
allow read: if true;
// Permettre la création à tous les utilisateurs authentifiés
allow create: if request.auth != null
&& request.resource.data.authorId == request.auth.uid;
// Permettre la modification et suppression seulement au propriétaire
allow update, delete: if request.auth != null
&& resource.data.authorId == request.auth.uid;
}
// Règles pour la collection githubStats (cache des stats GitHub)
match /githubStats/{statsId} {
// Permettre la lecture à tous (public) pour éviter les erreurs de permission
// Le cache GitHub peut être lu par tous pour améliorer les performances
allow read: if true;
// Permettre l'écriture (create/update) à tous les utilisateurs authentifiés
// Cette collection sert de cache partagé pour les stats GitHub
allow write: if request.auth != null;
}
// Règles pour la collection favorites
match /favorites/{favoriteId} {
// Permettre la lecture publique pour compter les favoris (mais pas les détails)
// Pour lire les détails d'un favori spécifique, l'utilisateur doit être le propriétaire
allow read: if true;
// Permettre la création seulement si l'utilisateur crée son propre favori
allow create: if request.auth != null
&& request.resource.data.userId == request.auth.uid;
// Permettre la suppression seulement au propriétaire
allow delete: if request.auth != null
&& resource.data.userId == request.auth.uid;
}
// Règles pour la collection likes
match /likes/{likeId} {
// Permettre la lecture à tous (public) pour afficher les compteurs de likes
allow read: if true;
// Permettre la création seulement si l'utilisateur crée son propre like
allow create: if request.auth != null
&& request.resource.data.userId == request.auth.uid;
// Permettre la suppression seulement au propriétaire
allow delete: if request.auth != null
&& resource.data.userId == request.auth.uid;
}
// Règles pour la collection notifications
match /notifications/{notificationId} {
// Lecture strictement limitée au propriétaire de la notification.
allow read: if request.auth != null
&& request.auth.uid == resource.data.userId;
// Création autorisée si l'utilisateur s'attribue sa notification
// ou s'il en est explicitement l'émetteur (fromUserId).
allow create: if request.auth != null
&& (
request.resource.data.userId == request.auth.uid
|| request.resource.data.fromUserId == request.auth.uid
);
// Permettre la mise à jour seulement au propriétaire (pour marquer comme lue)
allow update: if request.auth != null
&& resource.data.userId == request.auth.uid;
// Permettre la suppression seulement au propriétaire
allow delete: if request.auth != null
&& resource.data.userId == request.auth.uid;
}
// Règles pour les commentaires des projets
match /comments/{commentId} {
allow read: if true;
allow create: if request.auth != null
&& request.resource.data.userId == request.auth.uid
&& request.resource.data.text is string
&& request.resource.data.text.size() > 0
&& request.resource.data.text.size() <= 500;
allow update, delete: if request.auth != null
&& resource.data.userId == request.auth.uid;
}
// Règles pour la messagerie privée
match /privateMessages/{messageId} {
allow read: if request.auth != null
&& request.auth.uid in resource.data.participants;
allow create: if request.auth != null
&& request.resource.data.senderId == request.auth.uid
&& request.resource.data.receiverId is string
&& request.resource.data.participants is list
&& request.resource.data.participants.size() == 2
&& request.resource.data.participants.hasAll([
request.auth.uid,
request.resource.data.receiverId
])
&& request.resource.data.text is string
&& request.resource.data.text.size() > 0
&& request.resource.data.text.size() <= 2000;
allow update, delete: if request.auth != null
&& request.auth.uid in resource.data.participants;
}
}
}