📱
Flutter:Firebase Firestoreを始める(セキュリティルールの概要を知る)
「セキュリティルール,なんやそれ?わてははよ,とりあえず個人開発でアプリ作りだいんじゃ!」という人は,Flutterでのインストール以外飛ばしてください.その場合,セキュリティルール
は,テストモード
にしてください
Firestore設定に移る前に
Firebaseセキュリティルールについて
- 公式ドキュメント から引用
セキュリティルールの開始モード:Cloud Firestoreを例に
テストモード
- モバイル・Webクライアントライブラリを使用する場合に適している.
- 全てのユーザがデータを読み書きできる.
- ウェブ、Apple プラットフォーム、Android SDKを使用する場合は、テストモードを選択する.
ロックモード
- モバイルおよびウェブ クライアントからのすべての読み書きを拒否する.
- 認証されたアプリケーション サーバー(C#、Go、Java、Node.js、PHP、Python、Ruby)を引き続きデータベースにアクセスできる.
Firestoreのアクセスは直接,もしくはバックエンド経由???どっちがいいの?
これに関しては,stackoverflow
やreddit
で同様の質問が多数ありました(みんな考えることは一緒笑....)
いろいろ調べてみましたが,こういうことが書いてありました(英語記事なので,自分で意訳した内容です).どの記事に関しても,セキュリティルールの設定を行うことについて言及されてました.
簡単なモバイル・webアプリの場合は,直接アクセスで良さそう.他の場合に関しては,ユースケースによるって感じですね.
Firestore設定
Firestore Database
のページに移る.
Firebase Consoleに移り,-
Firestore Database
を始める.
Flutterインストール
- 前提:Firebaseの構成と初期化
- Flutterインストールを行う.
$ flutter pub add cloud_firestore
セキュリティルールの設定
-
はじめに
-
モバイルクライアントまたはwebクライアントから送られた全てのデータベースリクエストは,データの読み書き前に,セキュリティルールと照合して評価される.指定したドキュメントパスへのアクセスがルールによって拒否されると,リクエスト全体が失敗する.
-
サーバー側に関して:公式ドキュメント
-
要は,サーバ側には適用されないってことかな.
- Cloud Firestoreのルール画面:
ルールの記述
-
match
ステートメント:データベース内のドキュメントを識別 -
allow
:ドキュメントへのアクセスを制御する
service cloud.firestore {
match /databases/{database}/documents {
match /<some_path>/ {
allow read, write: if <some_condition>;
}
}
}
以下,基本的なルールセットの例(公式ドキュメントより)
- ルール自体は有効であるものの,本番環境アプリケーションでの使用は推奨されてない.
{document=**}
パスは,データベース全体の任意のドキュメントに一致する.
- 認証必須
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
- すべて拒否
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
- すべて許可
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
セキュリティルールに関して
- 詳しい資料はこちらです.
Discussion