blog.bouzuya.net

2025-09-15 async-graphql の extension で認証を一箇所に集約する検証をした

bouzuya/rust-examples の async-graphql4 で crates:async-graphql の extension を guard の代わりに使用する方法を検証した。

#[graphql(guard = "...")] の形で field などに認証などの処理を設定できるのだが、設定しそびれると処理が抜けてしまい、問題になる。そこで一律で認証などの処理を設定したくなった。

extension で実現できることは確認できた。

ただ、 async-graphql4 については、 user から roles を、 role から permissions を resolve の都度取得しており、ここでもし DB などから取得してしまうと性能上の問題が発生すると思う。

この問題についてはリクエストの冒頭で取得しておき、判定の処理のみを残す形にすれば解決できる。

async-graphql4 の実装は trait を使って抽象化するなど大げさなものも含むため、そのまま使うのではなく、参考にしながら、既存の実装に依存したものをアドホックに実装するで良いと思う。

おわり。


今日のコミット。