プロダクト制作、そして心がけていること
2019/06/06
#Firebase_Vue_Osaka Short LT
jiyuujin
- Vue/Nuxt/PHP/Scala/Java/Swift
- v-kansai/kansai.ts/..
- Web猫ブログ (webneko.dev)
毎月大阪、京都交互で
前回は Monaca UG共催
来週 6/10 に #1 やります
Re:build主催は久しぶり
今年1月の東京では参加枠の一人として
セキュリティルール
二重三重を目標に書く
サービス一覧
- Authentication
Firebase Hosting- Cloud Function
Realtime DB- Firestore
- Storage
デモ
writeを使わない
service cloud.firestore {
match /databases/{database}/documents {
function isAuthenticated() {
return request.auth != null;
}
// contacts
match /contacts/{document=**} {
allow read,update,delete: if isAuthenticated();
allow create: if !isAuthenticated();
}
}
}
弾けるものは弾く
service cloud.firestore {
match /databases/{database}/documents {
function validateText(text, min, max) {
return text is string &&
text.size() <= max &&
text.size() >= min
}
// contacts
match /contacts/{document=**} {
allow create: if !isAuthenticated() &&
validateText(incomingData().title, 1, 200);
}
}
}
フロントではしっかり型で管理
使える表現も多い
service cloud.firestore {
match /databases/{database}/documents {
function validateEmail(text) {
return text is string &&
text.matches('.*@gmail[.]com');
}
}
}
カテゴリーごとに分けたい時
ネストが使える
service cloud.firestore {
match /databases/{database}/documents {
// contacts
match /contacts/{document=**} {
// ...
match /category/{categoryID} {
// ...
}
}
}
}
管理者アカウント
専用のコレクション
返したフラグで判定
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return exists(/databases/$(database)/documents/admin/$(request.auth.uid))
}
}
}
まとめると、
- 権限を細分化する
- 型を導入するフロントに合わせて書く
- 管理者アカウントを準備する
ご静聴ありがとうございました🙇♀️
プロダクト制作、そして心がけていること #Firebase_Vue_Osaka
By jiyuujin
プロダクト制作、そして心がけていること #Firebase_Vue_Osaka
セキュリティルール周りを中心に心がけていること
- 972