Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hasura の Relationship と権限管理
Search
Hiroaki KARASAWA
January 19, 2023
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hasura の Relationship と権限管理
Hasura User Group Tokyo Meetup #2
2023/01/19
Hiroaki KARASAWA
January 19, 2023
More Decks by Hiroaki KARASAWA
See All by Hiroaki KARASAWA
スタートアップでポストモーテムを4年で200回やって得た学び
karszawa
1
150
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
1
1.5k
成功する技術選定について
karszawa
2
3.2k
飲食店のインフラサービス “ダイニー” のトラブル対応のすべて
karszawa
0
140
Google Cloud のモニタリング製品を徹底活用してみた
karszawa
0
110
ダウンタイム 30 秒で AlloyDB に移行した話
karszawa
0
580
DMS で AlloyDB に簡単移行!
karszawa
0
120
【現場の本音】App Engine から Cloud Run に移行してみた
karszawa
0
240
cls-hooked による実行コンテキストの保存と利用
karszawa
0
1.1k
Other Decks in Programming
See All in Programming
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
230
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
210
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
2
300
関数型プログラミングのメリットって何だろう?
wanko_it
0
170
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.5k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
2
1.2k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
250
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Into the Great Unknown - MozCon
thekraken
41
2.6k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
The Cost Of JavaScript in 2023
addyosmani
55
10k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
800
Being A Developer After 40
akosma
91
590k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
A Tale of Four Properties
chriscoyier
163
24k
Transcript
Hasura の Relationship と権限管理 Hiroaki KARASAWA aka karszawa from dinii,
inc. Hasura User Group Tokyo Meetup #2 2023/01/19
自己紹介 • 氏名:唐澤弘明 ◦ aka @karszawa • 所属:株式会社 dinii ◦
飲食店のモバイルオーダーとレジの会社 ◦ karszawa は黎明期にジョインしほぼすべての技術選定に関与 • 興味関心:JavaScript ♡ TypeScript ◦ コミュニティの大きさと技術の応用範囲が無限に広がっている世界観が好き ◦ 最近はデータベースが好き(特にポスグレ) 2
飲食店の All in One SaaS “ダイニー”
4 4 Hasura’s Manual Relationship
GraphQL における resolver の入れ子を復習 5 • orders は customer ごと取得
• ⇒ シンプルに実装すると N+1 問題が発生 • ⇒ DataLoader によってまとめて取得しておく Hasura なら?
Hasura での解決法 6 • SQL が自動で生成される ◦ ⇒ 自前で DataLoader
を実装する必要がなく楽ちん 😎 • 無闇矢鱈にネストを深めると恐ろしいクエリが発行される • ※ 自前で定義する場合でも DataLoader ではなく JOIN によるアプローチは可能ではある 自動生成
Relationship = GraphQL クエリを発行した際にネストで取得できる関連 7 ① 外部キー制約による Relationship ② 手動で追加する
Manual Relationship (外部キー制約は不要)
データの紐づき方に応じて定義できる二種類の関連 8
Manual Relationship の何が便利なのか 9 データの取得だけなら外部キー制約がある関連だけでも十分な気がする?
権限設定にも Relationship を活用できる 10 【前提】Hasura はデータベースと直接続なのでデータアクセスの権限管理は Hasura 自体で行う
【デモ】同じグループの卓であればお互いの注文内容を閲覧できる 11
【デモ】店舗アカウントでは指定した店舗の情報だけが見れるようにしたい 12 ✅ ✅ 🚫 マネージャー
なるほど… 13 面白いかも?
任意のテーブルと view を任意のカラムの同一性で設定できる 14 “ビューは物理的な実体として存在するものではありません。 ” “ その代わり、問い合わせでビューが参照される度に、指定された問い合わせが実行されます。 ” 日本PostgreSQLユーザ会
select した結果を table 的なものとし て参照できる
【デモ】多対多の関係をフラットに定義してみる 15 複数の卓をまとめて会計する = 合算会計 一つの卓を複数に分けて会計する = 個別会計
メモ CREATE VIEW "tableUser_tableUserPayment_view" AS SELECT "tableUserId", onSitePayment.* FROM "onSitePaymentTableUsers"
LEFT JOIN "onSitePayment" ON "onSitePaymentTableUsers"."onSitePaymentId" = "onSitePayment"."onSitePaymentId" 16
view を使えばかなり柔軟なアクセス制御が可能に 17 • ある時間帯でのみ閲覧可能 ⇒ 期間限定メニュー • 確率的に閲覧可能 ⇒
まぼろし島 • ツリー構造の子孫にあたるデータは編集可能 ⇒ 自社サービスとして権限管理を提供する場合 発想次第!
ここまでやるか? 18 Remote Schema で独自にロジックを実装すれば良いんじゃない? ⇒ Remote Schema は権限の設定には使えない
19 「寿司 虚空編」 小林銅蟲
まとめ 20 Custom Relationship を活用するために • SQL 力を高めよう • 自由な発想でクエリを書こう
ちなみにリモートのデータソース同士を JOIN できる • Remote Database Relationship • Remote Schema Relationship というものもある。 「寿司 虚空編」 小林銅蟲