Spaces:
Running
Running
File size: 2,667 Bytes
e3b5f50 | 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 | rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Default deny all
match /{document=**} {
allow read, write: if false;
}
function isSignedIn() {
return request.auth != null;
}
function isValidId(id) {
return id is string && id.size() > 0 && id.size() <= 128 && id.matches('^[a-zA-Z0-9_\\-]+$');
}
function isAdmin() {
return isSignedIn() && (
request.auth.token.email == 'bizcaustin@gmail.com' ||
request.auth.token.email == 'xaustino@hotmail.com'
);
}
function isOwner(userId) {
return isSignedIn() && request.auth.uid == userId;
}
// User profiles
match /users/{userId} {
allow read: if isOwner(userId) || isAdmin();
allow create: if isOwner(userId) &&
request.resource.data.uid == userId &&
request.resource.data.email is string &&
request.resource.data.email.size() <= 256 &&
request.resource.data.role in ['trustee', 'co_trustee', 'counsel', 'fiduciary', 'viewer'];
allow update: if (isOwner(userId) || isAdmin()) &&
request.resource.data.uid == resource.data.uid;
allow delete: if isAdmin();
}
// Consolidated court case registry
match /cases/{caseId} {
allow read: if isSignedIn();
allow create, update: if isSignedIn() && (
isAdmin() ||
(request.resource.data.caseNumber is string && request.resource.data.court is string)
);
allow delete: if isAdmin();
}
// Digital Signatures
match /signatures/{signatureId} {
allow read: if isSignedIn();
allow create: if isSignedIn() &&
request.resource.data.uid == request.auth.uid &&
request.resource.data.tabId is string &&
request.resource.data.pqcHash is string &&
request.resource.data.signedAt is string;
allow update, delete: if isAdmin();
}
// Court Filings & Presentments
match /filings/{filingId} {
allow read: if isSignedIn();
allow create: if isSignedIn() &&
request.resource.data.uid == request.auth.uid &&
request.resource.data.recipientCourt is string &&
request.resource.data.docketNumber is string;
allow update, delete: if isAdmin();
}
// Google Workspace Activity Ledger
match /workspace_activity/{activityId} {
allow read: if isSignedIn() && (resource.data.uid == request.auth.uid || isAdmin());
allow create: if isSignedIn() &&
request.resource.data.uid == request.auth.uid &&
request.resource.data.action is string;
allow update, delete: if isAdmin();
}
}
}
|