← NestJS コース
22. 認可とロール — RBAC
認可は「この人が何をしてよいか」を判定する処理で、RBAC(Role-Based Access Control)はユーザーに付けたロール(admin、editor など)で許可を決める代表的な方式です。NestJS では @Roles("admin") のようなカスタムデコレータでハンドラに必要なロールを宣言し、既習のガードがそのメタデータとログインユーザーのロールを突き合わせて通過か拒否かを決めます。
実務ではメタデータの読み取りに Reflector を使い、@Roles で付けた要求ロールをガード内で取り出します。要求ロールが付いていなければ全員通過、付いていればユーザーがそのロールを持つかを確認し、なければ 403 Forbidden を返します。下のコードはこのロール判定ロジックをプレーン TypeScript で再現したものです。
つまずきポイントは、認証なしに認可だけを行おうとすることです。ロール判定は「誰か」が確定して初めて成立するため、先に JWT などでユーザーを特定する必要があります。また「どれか1つのロールを持てば許可」なのか「すべて必須」なのかを最初に決めておかないと、判定ロジックが場当たり的になりがちです。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
TypeScript
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗