-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrules.bolt
66 lines (56 loc) · 1.16 KB
/
rules.bolt
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
// TYPES
type CurrentTimestamp extends Number {
validate() { this == now }
}
type InitialTimestamp extends Number {
validate() { initial(this, now) }
}
type User {
uid: String,
email: String,
lists: Object
}
type List {
key: String,
name: String,
owner: String,
userEmails: Object,
todos: Object | Null
}
type Todo {
key: String,
title: String,
completed: Boolean,
notes: String,
remindMe: Boolean,
createdOn: Number,
completedOn: Number | Null,
dueDate: Number | Null
}
// FUNCTIONS
initial(value, init) { value == (prior(value) == null ? init : prior(value)) }
isMember(userId, listId) {
root.child('users').child(userId).child('lists').child(listId) != null
}
// PATHS
path /users/{uid} is User {
read() { auth !== null }
write() { auth !== null && auth.uid === uid }
}
path /lists/{listId} is List {
read() {
isMember(auth.uid, listId)
}
write() {
isMember(auth.uid, listId)
}
}
path /lists/{listId}/todos {
read() {
isMember(auth.uid, listId)
}
write() {
isMember(auth.uid, listId)
}
}
path /lists/{listId}/todos/{todoId} is Todo {}