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

TypeScript×CASLでつくるSaaSの認可 / Authz with CASL

TypeScript×CASLでつくるSaaSの認可 / Authz with CASL

【概要】
「TypeScript×CASLでつくるSaaSの認可」

アプリの認可は、UIでの「見せない」とAPIでの「させない」が分断されがちです。本セッションでは、認可ライブラリCASLを用いて、フロントエンドとバックエンドで同一ポリシーを共有し、RBAC+ABAC(属性ベース)のハイブリッド設計を型安全に運用する方法を紹介します。

【イベント】
2025/11/23 TSKaigi Hokuriku 2025
https://hokuriku.tskaigi.org/

【PeopleX採用強化中】
Engineer Entrance Book: https://engineer-entrance.peoplex.jp/

Avatar for Jumpei Sakatsu

Jumpei Sakatsu

November 23, 2025
Tweet

More Decks by Jumpei Sakatsu

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 株式会社 PeopleX PeopleX AI⾯接 エンジニア スタートアップ創業メンバー、 AbemaTVなどを経て、PeopleXに参 画。AI上司、AI面接などAI/HR領域の新規サービスを 12ヶ月で5

    本立ち上げ。 @2025 PeopleX Inc. 坂津 潤平 JUMPEI SAKATSU ❤サウナ, スプラトゥーン, 鬼滅の刃, ジブリ, ホラー作品 @saka2jp サ活だいすき坂津と覚えてください (サウナ活動) 2
  2. ⾃⼰紹介 株式会社 PeopleX PeopleX AI⾯接 エンジニア 海外大学を卒業後、 Goodpatchをはじめ複数のスタートアップ企業 でモバイルアプリや SaaSプロダクトの開発に従事。

    2024年よりPeopleXでAIプロダクトのフロントエンドリード。 @2025 PeopleX Inc. 芹澤 和也 KAZUYA SERIZAWA ❤ ランチ、ボードゲーム、お喋り @seriseri_55 3
  3. Agenda 1 BtoB SaaSにおける認可 2 今回の題材:PeopleX AI⾯接の場合 3 技術選定:認可SaaS vs

    OSSライブラリ 4 なぜCASLなのか? 5 CASLによる認可実装 6 実際に導⼊・運⽤してみた感想 © PeopleX Inc. 4
  4. 認可の代表的なモデルのおさらい SaaS要件に応じて適切なモデルを選択する必要がある モデル 判定基準 特徴 RBAC (Role Based Access Control)

    役割 ・シンプルで直感的 ・「誰が何をできるか」を定義 ABAC (Attribute Based Access Control) 属性 ・「AかつBなら許可」のような複雑な条件を表現可能 ・きめ細やかな制御が可能 PBAC (Policy Based Access Control) ポリシー ・認可ロジックを分離、コード管理できる (Policy as Code) ReBAC (Relationship Based Access Control) 関係性 ・グラフ構造や階層構造に強い ・親リソースの権限を子へ継承させやすい 7
  5. PeopleX AI⾯接 24時間365⽇対応の労働⼒ 柔軟な対話AIが⼈に代わり業務 個社に合わせた業務設定 ・24時間365日対応可能な労働力 ・夜間、土日での対応可能 ・マネジメント不要 ・全て録画と文字起こしで事後確認可 ・営業、接客など顧客接点の職種も可

    ・24時間365日で顧客対応でリード、商談対応 ・グローバル対応可能(多言語対応) ・受付、接客など会社の顔として振る舞い ・個社の需要に沿った質問カスタマイズ ・複数のAIワーカーを簡単に作成可 10
  6. PeopleX AI⾯接の場合 ・要求に合わせてどの認可パターンで実装するかを決定 ・コストパフォーマンスやメンテナンス性などを考慮 代表的な要件 認可パターン適用 内容 テナント管理者はテナント設定 の操作のみ可能 RBAC

    「テナント管理者」というロールに最小の権限 を定義 評価担当者は「自部署」の応募 者のみ閲覧可能 ABAC 企業ユーザーの属性(部署 ID)とリソースの属 性を比較 評価担当者には個人情報(氏 名・生年月日など)を見せない Field Level 特定のフィールド(列)へのアクセス制御 12
  7. 主要な認可サービス (Authorization as a Service) @ 2025 PeopleX Inc. 1.

    Auth0 FGA ・Auth0 が提供する、Google Zanzibar に基づいた認可サービス ・特徴:Auth0 (Okta) エコシステムの⼀部であり、多機能 2. Oso Cloud ・開発者体験 (DX) を最優先に設計された、BtoB SaaS 開発で⼈気のあるサービスの⼀つ ・特徴:独⾃のポリシー⾔語「Polar」を使⽤。 3. Permit.io ・OPA (Open Policy Agent) をベースにしつつ、UIベースの管理に強みを持つサービス ・特徴:「ローコード」での権限管理を重視 / 権限設定を変更できる 管理UI を提供 14
  8. 認可SaaS vs OSS 「コスト」「開発体験」「Prisma連携」「低レイテンシ」を重視し、OSSを採⽤ 認可SaaS ・権限管理基盤を完全分離 ・⾔語⾮依存で共有可能 ・通信オーバーヘッドあり ・従量課⾦コストのリスク ※

    セルフホストの選択肢もある OSSライブラリ ・アプリと同⼀プロセスで動作 ・DBクエリとの連携 ・⾔語・FWへの依存度が⾼い © PeopleX Inc. 15
  9. Why CASL? © PeopleX Inc. Type Safety Isomorphic 定義したポリシーをフロントエンドとバックエンドの両⽅で再利⽤可能 Type

    Safety Type Safety ポリシーをTypeScript で宣⾔的に記述可能 Type Safety API Integration デコレータによるAPIレベルでの宣⾔的な認可設定が可能 TypeScript完全対応で型推論が強⼒ Database Integration SQLクエリ条件をポリシーとして宣⾔的に定義可能 TypeScript完全対応で型推論が強⼒ Frontend Integration 直感的・宣⾔的な認可判定が可能 17
  10. @ 2025 PeopleX Inc. ・CASL における Ability は、認可ルールの⼼臓部となるクラス ・「誰が(Subject)」「何を(Action)」「どうする」という認可のルール、ポリシーを詰め込んだオ ブジェクト

    ・アプリケーション側では、「ability.can('update', 'Article')」 などと問いかけるだけで、  複雑な条件分岐なしに権限判定を⾏うことが可能 Abilityとは? TypeScriptによるポリシー定義 19
  11. 39