Repository navigation
Expand file tree
/
Copy pathdatabase.rules.json
More file actions
93 lines (76 loc) · 5.35 KB
/
Copy pathdatabase.rules.json
File metadata and controls
93 lines (76 loc) · 5.35 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
{
"rules": {
".read": false,
".write": false,
"users": {
"$uid": {
".read": "auth != null && auth.uid === $uid",
".write": "auth != null && auth.uid === $uid",
"displayName": {
".validate": "newData.isString() && newData.val().length >= 1 && newData.val().length <= 40"
},
"roomId": {
".validate": "(newData.isString() && newData.val().matches(/^[A-HJ-NP-Z2-9]{6}$/)) || newData.val() === null"
},
"fcmToken": {
".validate": "newData.isString() || newData.val() === null"
},
"$other": { ".validate": false }
}
},
"roomSlots": {
"$roomId": {
".read": "auth != null",
".write": "auth != null && (\n\n (!data.exists()\n && newData.val() === false\n && root.child('rooms').child($roomId).child('owner').child('uid').val() === auth.uid)\n\n || (data.val() === false\n && newData.val() === true)\n\n || (data.val() === true\n && newData.val() === false\n && (root.child('rooms').child($roomId).child('member').child('uid').val() === auth.uid\n || root.child('rooms').child($roomId).child('owner').child('uid').val() === auth.uid))\n )"
}
},
"rooms": {
"$roomId": {
".read": "auth != null && (data.child('owner').child('uid').val() === auth.uid || data.child('member').child('uid').val() === auth.uid)",
".write": "auth != null && (\n\n (!data.exists()\n && newData.hasChildren()\n && newData.child('owner').child('uid').val() === auth.uid)\n\n || (newData.val() === null\n && data.exists()\n && data.child('owner').child('uid').val() === auth.uid)\n\n || (data.exists()\n && newData.hasChildren()\n && data.child('owner').child('uid').val() === auth.uid\n && newData.child('live').val() === data.child('live').val())\n )",
".validate": "!newData.exists() || newData.hasChildren()",
"$other": { ".validate": false },
"owner": {
"uid": {
".write": "auth != null && (\n\n (!data.exists() && newData.val() === auth.uid)\n\n || newData.val() === root.child('rooms').child($roomId).child('member').child('uid').val()\n )"
},
"name": {
".write": "auth != null && (\n\n (!data.exists() && !root.child('rooms').child($roomId).child('owner').child('uid').exists())\n\n || data.parent().child('uid').val() === auth.uid\n\n || newData.val() === root.child('rooms').child($roomId).child('member').child('name').val()\n )",
".validate": "newData.val() === null || (newData.isString() && newData.val().length >= 1 && newData.val().length <= 40)"
}
},
"member": {
".write": "auth != null && ((newData.hasChildren() && !data.exists() && newData.child('uid').val() === auth.uid && data.parent().child('owner').child('uid').val() !== auth.uid) || (newData.val() === null && (data.child('uid').val() === auth.uid || data.parent().child('owner').child('uid').val() === auth.uid)))",
"uid": {
".write": "auth != null && (\n\n (newData.val() === auth.uid\n && newData.val() !== root.child('rooms').child($roomId).child('owner').child('uid').val()\n && root.child('rooms').child($roomId).child('owner').child('uid').exists()\n && !data.exists())\n\n || (newData.val() === null\n && (data.val() === auth.uid\n || root.child('rooms').child($roomId).child('owner').child('uid').val() === auth.uid))\n )",
".validate": "newData.val() === null || (newData.isString() && newData.val() !== root.child('rooms').child($roomId).child('owner').child('uid').val())"
},
"name": {
".write": "auth != null && (\n\n root.child('rooms').child($roomId).child('owner').child('uid').val() === auth.uid\n\n || data.parent().child('uid').val() === auth.uid\n\n || !data.parent().child('uid').exists()\n )",
".validate": "newData.val() === null || (newData.isString() && newData.val().length >= 1 && newData.val().length <= 40)"
}
},
"live": {
".write": false,
".validate": "newData.hasChildren() || newData.val() === null",
"$uid": {
".write": "auth != null && $uid === auth.uid && (root.child('rooms').child($roomId).child('owner').child('uid').val() === auth.uid || root.child('rooms').child($roomId).child('member').child('uid').val() === auth.uid)",
".validate": "newData.hasChildren() || newData.val() === null",
"$other": { ".validate": false },
"text": {
".validate": "newData.val() === null || (newData.isString() && newData.val().length <= 500)"
},
"updatedAt": {
".validate": "newData.val() === null || newData.isNumber()"
}
}
},
"createdAt": {
".write": "auth != null && !data.exists() && newData.isNumber()",
".validate": "newData.isNumber()"
}
}
},
"$other": { ".read": false, ".write": false }
}
}