Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hasura の Relationship と権限管理

Hasura の Relationship と権限管理

Hasura User Group Tokyo Meetup #2
2023/01/19

Hiroaki KARASAWA

January 19, 2023
Tweet

More Decks by Hiroaki KARASAWA

Other Decks in Programming

Transcript

  1. 自己紹介 • 氏名:唐澤弘明 ◦ aka @karszawa • 所属:株式会社 dinii ◦

    飲食店のモバイルオーダーとレジの会社 ◦ karszawa は黎明期にジョインしほぼすべての技術選定に関与 • 興味関心:JavaScript ♡ TypeScript ◦ コミュニティの大きさと技術の応用範囲が無限に広がっている世界観が好き ◦ 最近はデータベースが好き(特にポスグレ) 2
  2. GraphQL における resolver の入れ子を復習 5 • orders は customer ごと取得

    • ⇒ シンプルに実装すると N+1 問題が発生 • ⇒ DataLoader によってまとめて取得しておく Hasura なら?
  3. Hasura での解決法 6 • SQL が自動で生成される ◦ ⇒ 自前で DataLoader

    を実装する必要がなく楽ちん 😎 • 無闇矢鱈にネストを深めると恐ろしいクエリが発行される • ※ 自前で定義する場合でも DataLoader ではなく JOIN によるアプローチは可能ではある 自動生成
  4. メモ CREATE VIEW "tableUser_tableUserPayment_view" AS SELECT "tableUserId", onSitePayment.* FROM "onSitePaymentTableUsers"

    LEFT JOIN "onSitePayment" ON "onSitePaymentTableUsers"."onSitePaymentId" = "onSitePayment"."onSitePaymentId" 16
  5. view を使えばかなり柔軟なアクセス制御が可能に 17 • ある時間帯でのみ閲覧可能 ⇒ 期間限定メニュー • 確率的に閲覧可能 ⇒

    まぼろし島 • ツリー構造の子孫にあたるデータは編集可能 ⇒ 自社サービスとして権限管理を提供する場合 発想次第!
  6. まとめ 20 Custom Relationship を活用するために • SQL 力を高めよう • 自由な発想でクエリを書こう

    ちなみにリモートのデータソース同士を JOIN できる • Remote Database Relationship • Remote Schema Relationship というものもある。 「寿司 虚空編」 小林銅蟲