Skip to content

Commit 7931e8f

Browse files
committed
Fix: Update firestore rules and add error handling to NotesBrowser
1 parent fa52b68 commit 7931e8f

2 files changed

Lines changed: 42 additions & 16 deletions

File tree

firestore.rules

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,42 @@
1-
rules_version = '2';
2-
31
service cloud.firestore {
42
match /databases/{database}/documents {
53
// Helper function to check if user is authenticated
64
function isAuthenticated() {
75
return request.auth != null;
86
}
97

10-
// Departments, Batches, Semesters, Subjects: Public Read/Write for Dev
8+
// Departments, Batches, Semesters, Subjects: Public Read, Auth Write
119
match /departments/{dept} {
12-
allow read, write: if true;
10+
allow read: if true;
11+
allow write: if isAuthenticated();
1312
}
1413

1514
match /batches/{batch} {
16-
allow read, write: if true;
15+
allow read: if true;
16+
allow write: if isAuthenticated();
1717
}
1818

1919
match /semesters/{sem} {
20-
allow read, write: if true;
20+
allow read: if true;
21+
allow write: if isAuthenticated();
2122
}
2223

2324
match /subjects/{sub} {
24-
allow read, write: if true;
25+
allow read: if true;
26+
allow write: if isAuthenticated();
2527
}
2628

27-
// Folders: Public Read/Write for Dev
29+
// Folders: Public Read, Auth Write
2830
match /folders/{folder} {
29-
allow read, write: if true;
31+
allow read: if true;
32+
allow write: if isAuthenticated();
3033
}
3134

32-
// Notes: Public Read/Write for Dev
35+
// Notes: Public Read, Auth Write (with owner check for strictness if needed, but keeping simple for now)
3336
match /notes/{note} {
34-
allow read, write: if true;
37+
allow read: if true;
38+
allow create: if isAuthenticated();
39+
allow update, delete: if isAuthenticated();
3540
}
3641
}
3742
}

src/components/public/NotesBrowser.tsx

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ export default function NotesBrowser() {
4242
setSelectedSub(null);
4343
setSearchQuery("");
4444
setIsSearching(false);
45-
setBatches(await getBatches(dept.id));
45+
try {
46+
setBatches(await getBatches(dept.id));
47+
} catch (error) {
48+
console.error("Failed to load batches", error);
49+
setBatches([]);
50+
}
4651
}
4752

4853
async function handleBatchClick(batch: any) {
@@ -53,7 +58,12 @@ export default function NotesBrowser() {
5358
setSelectedBatch(batch);
5459
setSelectedSem(null);
5560
setSelectedSub(null);
56-
setSemesters(await getSemesters(batch.id));
61+
try {
62+
setSemesters(await getSemesters(batch.id));
63+
} catch (error) {
64+
console.error("Failed to load semesters", error);
65+
setSemesters([]);
66+
}
5767
}
5868

5969
async function handleSemClick(sem: any) {
@@ -63,7 +73,12 @@ export default function NotesBrowser() {
6373
}
6474
setSelectedSem(sem);
6575
setSelectedSub(null);
66-
setSubjects(await getSubjects(sem.id));
76+
try {
77+
setSubjects(await getSubjects(sem.id));
78+
} catch (error) {
79+
console.error("Failed to load subjects", error);
80+
setSubjects([]);
81+
}
6782
}
6883

6984
async function handleSubClick(sub: any) {
@@ -73,8 +88,14 @@ export default function NotesBrowser() {
7388
}
7489
setSelectedSub(sub);
7590
setLoading(true);
76-
setNotes(await getNotes(sub.id));
77-
setLoading(false);
91+
try {
92+
setNotes(await getNotes(sub.id));
93+
} catch (error) {
94+
console.error("Failed to load notes", error);
95+
setNotes([]);
96+
} finally {
97+
setLoading(false);
98+
}
7899
}
79100

80101
const handleSearch = async (e: React.FormEvent) => {

0 commit comments

Comments
 (0)