-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdatabase.rules.json
193 lines (193 loc) · 6.27 KB
/
database.rules.json
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
{
"rules": {
"codes": {
".read": true,
"$snippetId": {
".read": true,
".write": "root.child('snippets').child($snippetId).exists()",
".indexOn": [
"language"
],
"$codeId": {
".write": "(data.exists() && newData.exists() && newData.child('user').val() === auth.uid) || root.child('snippets').child($snippetId).child('author').val() === auth.id",
"user": {
".validate": "newData.isString() && root.child('users').child(newData.val()).exists()"
},
"code": {
".validate": "newData.isString() && newData.val().length > 0"
},
"language": {
".validate": "newData.isString() && newData.val().length > 0"
},
"date": {
".validate": "newData.val() <= now"
},
"request": {
".validate": "newData.isBoolean()"
},
"validated": {
".validate": "newData.isBoolean()"
}
}
}
},
"comments": {
".read": true,
".write": "auth != null",
"$snippetId": {
".read": true,
".write": "root.child('snippets').child($snippetId).exists()",
"$commentId": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === data.child('user').val()) || root.child('snippets').child($snippetId).child('author').val() === auth.uid",
"user": {
".validate": "newData.isString() && root.child('users').child(newData.val()).exists()"
},
"date": {
".validate": "newData.isNumber() && newData.val() <= now"
},
"content": {
".validate": "newData.isString() && newData.val().length > 0"
},
"$other": {
".validate": false
}
}
}
},
"contributions": {
".read": true,
"$uid": {
".write": "root.child('users').child($uid).exists()",
"$snippetId": {
".validate": "root.child('snippets').child($snippetId).exists() || root.child('snippets').child($snippetId).child('author').val() === auth.uid"
}
}
},
"likes": {
"$snippetId": {
".read": true,
".write": "root.child('snippets').child($snippetId).exists()",
"$uid": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === $uid) || root.child('snippets').child($snippetId).child('author').val() === auth.uid"
}
}
},
"notifications": {
".read": true,
"$uid": {
".read": true,
".write": "root.child('users').child($uid).exists()",
"$notificationId": {
".read": true,
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === $uid)",
"type": {
".validate": "newData.isString()"
},
"user": {
".validate": "root.child('users').child(newData.val()).exists()"
},
"snippetName": {
".validate": "newData.isString()"
},
"snippetId": {
".validate": "newData.isString() && root.child('snippets').child(newData.val()).exists()"
},
"request": {
".validate": "newData.isBoolean()"
},
"requestId": {
".validate": true
},
"language": {
".validate": "newData.isString()"
},
"read": {
".validate": "newData.isBoolean()"
},
"date": {
".validate": "newData.val() <= now"
},
"$other": {
".validate": false
}
}
}
},
"requests": {
".read": true,
"$snippetId": {
".read": true,
".write": "root.child('snippets').child($snippetId).exists()",
"$requestId": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === root.child('snippets').child($snippetId).child('author').val())",
".validate": "!newData.exists() || root.child('codes').child($snippetId).child(newData.val()).exists()"
}
}
},
"snippets": {
".read": true,
".write": true,
".indexOn": [
"likesCounter",
"date",
"author",
"name"
],
"$snippetId": {
".read": true,
".write": true,
"name": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === data.child('author').val())",
".validate": "newData.isString() && newData.val().length >= 3"
},
"date": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === data.child('author').val())",
".validate": "newData.isNumber()"
},
"likesCounter": {
".validate": "newData.isNumber() && newData.val() >= 0"
},
"codesCounter": {
".validate": "newData.isNumber() && newData.val() >= 0"
},
"author": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === data.child('author').val())",
".validate": "root.child('users').child(newData.parent().child('author').val()).exists()"
},
"description": {
".write": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === data.child('author').val())",
".validate": true
}
}
},
"snippetsByUid": {
"$uid": {
".write": "root.child('users').child($uid).exists()",
".read": true,
"$snippetId": {
".read": true,
".validate": "(!data.exists() && newData.exists()) || (data.exists() && auth.uid === $uid) || root.child('snippets').child($snippetId).child('author').val() === auth.uid"
}
}
},
"users": {
".read": true,
".indexOn": [
"email"
],
"$uid": {
".read": true,
".write": "$uid === auth.uid",
"avatar": {
".validate": "newData.isString()"
},
"email": {
".validate": "newData.isString() && newData.val().contains('@')"
},
"username": {
".validate": "newData.isString() && newData.val().length >= 2 && newData.val().length <= 30"
}
}
}
}
}