社会人から始めたプログラミング

プログラミング、エンジニアに関することでの備忘録、シェアしたい情報などを共有するためのブログです。

firebase の realtime database の REST API / firestore の REST API で security ruleを活用してデータ取得したい

やりたかったこと

unrealのアプリからREST APIでfirebaseのデータを活用しようとしたときに、 realtime database から security rules を適応した形で REST APIでデータ取得したかった。


問題

realtime databaseだとsecurity rules 無視して全部取得できてしまう。

参照: stackoverflow.com

*ちなみに、rest api で user 認証後にデータ取得する方法はこちらなどがあります。 (emailとpasswordでログインの例) firebase.google.com


結論

firestoreのほうならsecurity rulesかけたままデータ取得できた。

取得するための curl のコマンドを使用。 (まずはできることを確認するためにcurlがちょうど良かったので)

schedule(コレクション名)のuser_idが1のものを取得するためのcurlコマンド:

curl 'https://firestore.googleapis.com/v1/projects/[プロジェクトid([]はいらない。)]/databases/(default)/documents:runQuery?key=[特定のユーザーのidToken]' -X POST -H "Content-Type: application/json" -d '{"structuredQuery":{"where":{"fieldFilter":{"field":{"fieldPath":"user_id"},"op":"EQUAL","value":{"stringValue":"123"}}},"from":[{"collectionId":"schedule"}]}}'

*1

security rules例:

rules_version = 'x';
service cloud.firestore {
  match /databases/{database}/documents {
    ...
    match /schedule/{scheduleID} {
      allow read: if resource.data.user_id == "123";
      allow write: if request.resource.data.user_id == request.auth.uid;
    }
    ...
  }
}

・firestoreのrunQueryメソッドを利用しております。
 GETでなくてPOSTでqueryの結果取得してください。
 (GETでうまく行かないなぁとしばらく悩んだ。。orz)

・GETでcollection取得する場合は、listというメソッドを使っている模様。
 使えるparamsが一緒だった。最初、realtime data baseでつかえたlimitとか
 startAtとか使えないなぁと悩んでいた。

*改行など除きたい場合は下記のものなどで削除してください。 html-css-javascript.com

参照: https://stackoverflow.com/questions/49723881/firebase-firestore-rest-api-starting-query

*1:ちなみに、queryで取得したデータの中に制限かかっているデータが入ってたらpermissionエラー出ることを確認。ただ、rest apiからrequest.auth.uuidが取得できないみたいでやり方を考え中…

Thinreports (ruby) の tips

帳票、pdfを作成するのに使うことができるツール Thinreports Quick reference: https://github.com/thinreports/thinreports-generator

準備:

  1. gem file をインストール

  2. エディターをインストール(OSごとにあり windows / mac / linux

  → https://github.com/thinreports/thinreports-editor/releases

Tips(~7 そのうち増やすかも):

  • tips1. 文字の幅をぴったりにすると文字が切れるので、少し余裕をもたせる。

  • tips2. 参照文字の出力場所が上下にズレることがあるので出力して要確認。

  • tips3. table の中でリピートしたい値、ボーダーなどの作成は、

    外部からコピー後、フォーカスをテーブルのheaderやdetailなどリピートする箇所に合わせてからペーストすること。

  • tips4. table header detailなどはペーストする前に、範囲を大きく取っておいて、     参照の値などを入れると良いです。値を入れた後に、header や detail の高さを調整しましょう。

  • tips5. table headerなどの中のtextの範囲が大きいと予定している border の外に要素が飛び出すので、

    高さや横幅を border に合わせようとしても想定より縮まらないので注意。

  • tips6. table undefined method `copy' for nil:NilClass は表示領域が足りていない場合があるので調整。

  • tips7. table 固定のテーブルは絵を書いたほうが早い。グリッド表示を使うべし。

githubのプルリクエストの中などで、jiraのチケットを書かなくても見れたら嬉しい。

chrome の extention 導入で見れる

https://stackoverflow.com/questions/29473255/make-jira-links-clickable-in-github

↑stack over flowに答えがあった。 jira hot linkerを入れて、設定してあげればok

chrome.google.com

こういったとこを見るとぼちぼち需要はありそう。だけど、githubと競合だからデフォルトの昨日としては導入されなさそうとの見解あり。 github.com