Skip to content

Remove globs from default Firestore rules #8510

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
- Fixed an issue where the prompt to create apphosting.emulator.yaml did not work with backends that are not at the project.root (#8412)
- Fixed an issue where Terms of Service acceptance would be checked for non-human users.
- Changed default security rules from `firebase init` to be more secure.
2 changes: 1 addition & 1 deletion src/init/features/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
}

const DEFAULT_RULES = JSON.stringify(
{ rules: { ".read": "auth != null", ".write": "auth != null" } },
{ rules: { some_path: { ".read": "auth != null", ".write": "auth != null" } } },
null,
2,
);
Expand Down Expand Up @@ -113,7 +113,7 @@
);
spinner.succeed();
return createdInstance;
} catch (err: any) {

Check warning on line 116 in src/init/features/database.ts

View workflow job for this annotation

GitHub Actions / lint (20)

Unexpected any. Specify a different type
spinner.fail();
throw err;
}
Expand Down
19 changes: 8 additions & 11 deletions templates/init/firestore/firestore.rules
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
rules_version = '2';

service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
// This rule allows anyone with your database reference to view, edit,
// and delete all data in your database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your database will be denied.
//
// Make sure to write security rules for your app before that time, or
// else all client requests to your database will be denied until you
// update your rules.
allow read, write: if request.time < timestamp.date({{IN_30_DAYS}});
// Security rules are closed by default - if you don't have a rule that grants access,
// clients will not be able to read or write to that location in Firestore.
// Below is an example of how to open up a collection to only authenticated users
// For more help developing your security rules, see https://firebase.google.com/docs/rules/basics
match /some_collection/{document} {
allow read, write: if request.auth != null;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wondering if we should keep the time sensitive rules... @sam-gc what do you think?

}
}
}
13 changes: 7 additions & 6 deletions templates/init/storage/storage.rules
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
rules_version = '2';

// Craft rules based on data in your Firestore database
// allow write: if firestore.get(
// /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
// Security rules are closed by default - if you don't have a rule that grants access,
// clients will not be able to read or write to that location in Storafe.
// Below is an example of how to open up a folder to only authenticated users
// For more help developing your security rules, see https://firebase.google.com/docs/rules/basics
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
}
Loading