-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdatabase.rules.json
107 lines (107 loc) · 3.11 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
{
"rules": {
"users": {
".read": "auth !== null",
".indexOn": [
"filter",
"updatedAt"
],
"$userId": {
".write": "auth !== null && (auth.uid === $userId || root.child('admins').child(auth.uid).exists())"
}
},
"pairs": {
".indexOn": [
"updatedAt"
],
"$pairId": {
".read": "auth !== null && $pairId.contains(auth.uid)",
".write": "auth !== null && $pairId.contains(auth.uid)"
}
},
"chats": {
"$userId": {
".read": "auth !== null && (auth.uid === $userId || root.child('admins').child(auth.uid).exists())",
".write": "auth !== null && auth.uid === $userId"
}
},
"rooms": {
".read": "auth !== null",
".indexOn": [
"filter",
"closedAt"
],
"$roomId": {
".write": "auth !== null && auth.uid === newData.child('userId').val()"
}
},
"messages": {
"$roomId": {
".read": "auth !== null",
".indexOn": [
"createdAt"
],
"$messageId": {
".write": "auth !== null && auth.uid === newData.child('userId').val()",
".validate": "newData.hasChild('content')",
"content": {
".validate": "newData.isString() && newData.val().length <= 1024"
}
}
}
},
"accesses": {
"$accessId": {
".write": "auth !== null"
}
},
"expires": {
"$expireId": {
".write": "auth !== null"
}
},
"admins": {
".read": "auth !== null",
".write": false,
"$userId": {
".read": "auth !== null && auth.uid === $userId"
}
},
"reports": {
".read": "auth !== null && root.child('admins').child(auth.uid).exists()",
".indexOn": [
"status",
"createdAt"
],
"$reportId": {
".read": "auth !== null && (data.child('userId').val() === auth.uid || root.child('admins').child(auth.uid).exists())",
".write": "auth !== null && ((!data.exists() && newData.child('userId').val() === auth.uid) || (data.exists() && root.child('admins').child(auth.uid).exists()))",
".validate": "newData.hasChildren(['userId', 'chatId', 'partnerDisplayName', 'createdAt', 'status'])",
"userId": {
".validate": "newData.isString()"
},
"chatId": {
".validate": "newData.isString()"
},
"partnerDisplayName": {
".validate": "!newData.exists() || newData.isString()"
},
"createdAt": {
".validate": "newData.isNumber()"
},
"status": {
".validate": "newData.isString() && (newData.val() === 'pending' || newData.val() === 'resolved')"
},
"resolution": {
".validate": "!newData.exists() || (newData.isString() && newData.val().length <= 1000)"
},
"adminId": {
".validate": "!newData.exists() || (newData.isString() && root.child('admins').child(newData.val()).exists())"
},
"resolvedAt": {
".validate": "!newData.exists() || newData.isNumber()"
}
}
}
}
}