masamune_model_firestore_builder 3.2.2
masamune_model_firestore_builder: ^3.2.2 copied to clipboard
Define a builder to describe Firestore rules; build using the masamune_annotation annotation.
Masamune Model Firestore
[GitHub] | [YouTube] | [Packages] | [X] | [LinkedIn] | [mathru.net]
Masamune Model Firestore Builder #
Usage #
Installation #
- Add the builder as a development dependency alongside the runtime package.
flutter pub add katana_model_firestore
flutter pub add --dev masamune_model_firestore_builder
flutter pub add --dev build_runner
Generate Firestore Rules and Indexes #
- Annotate your models with
@CollectionModelPathand/or@DocumentModelPath:
// lib/models/user.dart
@freezed
@formValue
@immutable
@CollectionModelPath('user')
class UserModel with _$UserModel {
const factory UserModel({
required String name,
@Default('') String email,
@Default(ModelTimestamp.now()) ModelTimestamp createdAt,
}) = _UserModel;
// ... rest of the model
}
- Run the code generator:
katana code generate
This generates:
firebase/firestore.rules- Security rules based on your model structurefirebase/firestore.indexes.json- Composite indexes for your queries
Generated Files #
firestore.rules: Contains security rules like:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /user/{userId} {
allow read, write: if request.auth != null;
}
}
}
firestore.indexes.json: Contains index definitions for complex queries:
{
"indexes": [
{
"collectionGroup": "user",
"queryScope": "COLLECTION",
"fields": [
{"fieldPath": "createdAt", "order": "DESCENDING"},
{"fieldPath": "name", "order": "ASCENDING"}
]
}
]
}
Deploy to Firebase #
- Deploy the generated rules and indexes to your Firebase project:
# Deploy both rules and indexes
firebase deploy --only firestore:rules,firestore:indexes
# Or deploy individually
firebase deploy --only firestore:rules
firebase deploy --only firestore:indexes
Customize Generation #
Configure output paths in build.yaml:
targets:
$default:
builders:
masamune_model_firestore_builder:
options:
output_dir: "firebase" # Default output directory
Tips #
- Run
katana code generateafter any model changes to keep rules synchronized - Review generated rules before deploying to production
- Add custom rules in the Firebase Console if needed (they won't be overwritten)
- Use
firebase deploy --only firestore:rulesfor quick rule updates during development
GitHub Sponsors #
Sponsors are always welcome. Thank you for your support!