From ec6cdba0e814f046d26393ef35be15f49ef4d23a Mon Sep 17 00:00:00 2001 From: Tom Arra Date: Wed, 4 May 2022 15:51:39 -0500 Subject: [PATCH] feat: adding firestore rules (#322) * feat: adding firestore rules * Update path * making it not specific to pinball-dev --- firebase.json | 3 +++ firestore.rules | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 firestore.rules diff --git a/firebase.json b/firebase.json index 7fbb8d30..1338aeba 100644 --- a/firebase.json +++ b/firebase.json @@ -1,4 +1,7 @@ { + "firestore": { + "rules": "firestore.rules" + }, "hosting": { "public": "build/web", "site": "ashehwkdkdjruejdnensjsjdne", diff --git a/firestore.rules b/firestore.rules new file mode 100644 index 00000000..db8d29c1 --- /dev/null +++ b/firestore.rules @@ -0,0 +1,29 @@ +rules_version = '2'; +service cloud.firestore { + match /databases/{database}/documents { + match /leaderboard/{userId} { + + function prohibited(initials) { + let prohibitedInitials = get(/databases/$(database)/documents/prohibitedInitials/list).data.prohibitedInitials; + return initials in prohibitedInitials; + } + + function inCharLimit(initials) { + return initials.size() < 4; + } + + function isAuthedUser(auth) { + return request.auth.uid != null; && auth.token.firebase.sign_in_provider == "anonymous" + } + + // Leaderboard can be read if it doesn't contain any prohibited initials + allow read: if !prohibited(resource.data.playerInitials); + + // A leaderboard entry can be created if the user is authenticated, + // it's 3 characters long, and not a prohibited combination. + allow create: if isAuthedUser(request.auth) && + inCharLimit(request.resource.data.playerInitials) && + !prohibited(request.resource.data.playerInitials); + } + } +} \ No newline at end of file