プロダクト制作、そして心がけていること

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