-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirestore.rules
More file actions
57 lines (47 loc) · 1.7 KB
/
Copy pathfirestore.rules
File metadata and controls
57 lines (47 loc) · 1.7 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
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Default deny
match /{document=**} {
allow read, write: if false;
}
// Auth helpers
function isSignedIn() {
return request.auth != null;
}
function isOwner(userId) {
return isSignedIn() && request.auth.uid == userId;
}
function isValidId(id) {
return id is string && id.size() <= 128 && id.matches('^[a-zA-Z0-9_\\-]+$');
}
// Thesis validation
function isValidThesis(data) {
return data.keys().hasAll(['userId', 'title', 'structure', 'createdAt', 'updatedAt'])
&& data.userId is string
&& data.title is string && data.title.size() <= 500
&& data.structure is map
&& data.createdAt == request.time
&& data.updatedAt == request.time;
}
match /visitors/{document} {
allow read, write: if true;
}
match /online_sessions/{document} {
allow read, write: if true;
}
match /theses/{thesisId} {
allow get: if isSignedIn() && resource.data.userId == request.auth.uid;
allow list: if isSignedIn() && resource.data.userId == request.auth.uid;
allow create: if isSignedIn()
&& isValidThesis(request.resource.data)
&& request.resource.data.userId == request.auth.uid;
allow update: if isSignedIn()
&& resource.data.userId == request.auth.uid
&& request.resource.data.userId == resource.data.userId
&& request.resource.data.createdAt == resource.data.createdAt
&& request.resource.data.updatedAt == request.time;
allow delete: if isSignedIn() && resource.data.userId == request.auth.uid;
}
}
}