Slide 1

Slide 1 text

TypeScript×CASLでつくる SaaSの認可 2025.11.23 TSKaigi Hokuriku 2025 PeopleX / 坂津潤平, 芹澤和也

Slide 2

Slide 2 text

⾃⼰紹介 株式会社 PeopleX PeopleX AI⾯接 エンジニア スタートアップ創業メンバー、 AbemaTVなどを経て、PeopleXに参 画。AI上司、AI面接などAI/HR領域の新規サービスを 12ヶ月で5 本立ち上げ。 @2025 PeopleX Inc. 坂津 潤平 JUMPEI SAKATSU ❤サウナ, スプラトゥーン, 鬼滅の刃, ジブリ, ホラー作品 @saka2jp サ活だいすき坂津と覚えてください (サウナ活動) 2

Slide 3

Slide 3 text

⾃⼰紹介 株式会社 PeopleX PeopleX AI⾯接 エンジニア 海外大学を卒業後、 Goodpatchをはじめ複数のスタートアップ企業 でモバイルアプリや SaaSプロダクトの開発に従事。 2024年よりPeopleXでAIプロダクトのフロントエンドリード。 @2025 PeopleX Inc. 芹澤 和也 KAZUYA SERIZAWA ❤ ランチ、ボードゲーム、お喋り @seriseri_55 3

Slide 4

Slide 4 text

Agenda 1 BtoB SaaSにおける認可 2 今回の題材:PeopleX AI⾯接の場合 3 技術選定:認可SaaS vs OSSライブラリ 4 なぜCASLなのか? 5 CASLによる認可実装 6 実際に導⼊・運⽤してみた感想 © PeopleX Inc. 4

Slide 5

Slide 5 text

01 1. BtoB SaaSにおける認可 © PeopleX Inc. 5

Slide 6

Slide 6 text

認可ロジックの分散リスク UI・API・DBでロジックが重複・散乱するとバグの温床に UI:⾒せない 権限のないボタンを⾮表⽰ API:させない 不正な操作をガード DB:引かない 他者のデータを取得しない © PeopleX Inc. 6

Slide 7

Slide 7 text

認可の代表的なモデルのおさらい 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

Slide 8

Slide 8 text

Demo デモ © PeopleX Inc. 8

Slide 9

Slide 9 text

02 2. PeopleX AI⾯接の場合 © PeopleX Inc. 9

Slide 10

Slide 10 text

PeopleX AI⾯接 24時間365⽇対応の労働⼒ 柔軟な対話AIが⼈に代わり業務 個社に合わせた業務設定 ・24時間365日対応可能な労働力 ・夜間、土日での対応可能 ・マネジメント不要 ・全て録画と文字起こしで事後確認可 ・営業、接客など顧客接点の職種も可 ・24時間365日で顧客対応でリード、商談対応 ・グローバル対応可能(多言語対応) ・受付、接客など会社の顔として振る舞い ・個社の需要に沿った質問カスタマイズ ・複数のAIワーカーを簡単に作成可 10

Slide 11

Slide 11 text

PeopleX AI⾯接 11

Slide 12

Slide 12 text

PeopleX AI⾯接の場合 ・要求に合わせてどの認可パターンで実装するかを決定 ・コストパフォーマンスやメンテナンス性などを考慮 代表的な要件 認可パターン適用 内容 テナント管理者はテナント設定 の操作のみ可能 RBAC 「テナント管理者」というロールに最小の権限 を定義 評価担当者は「自部署」の応募 者のみ閲覧可能 ABAC 企業ユーザーの属性(部署 ID)とリソースの属 性を比較 評価担当者には個人情報(氏 名・生年月日など)を見せない Field Level 特定のフィールド(列)へのアクセス制御 12

Slide 13

Slide 13 text

03 3. 技術選定:SaaS vs OSS © PeopleX Inc. 13

Slide 14

Slide 14 text

主要な認可サービス (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

Slide 15

Slide 15 text

認可SaaS vs OSS 「コスト」「開発体験」「Prisma連携」「低レイテンシ」を重視し、OSSを採⽤ 認可SaaS ・権限管理基盤を完全分離 ・⾔語⾮依存で共有可能 ・通信オーバーヘッドあり ・従量課⾦コストのリスク ※ セルフホストの選択肢もある OSSライブラリ ・アプリと同⼀プロセスで動作 ・DBクエリとの連携 ・⾔語・FWへの依存度が⾼い © PeopleX Inc. 15

Slide 16

Slide 16 text

04 4. なぜCASLなのか? © PeopleX Inc. 16

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

05 5. CASLによる認可実装 © PeopleX Inc. 18

Slide 19

Slide 19 text

@ 2025 PeopleX Inc. ・CASL における Ability は、認可ルールの⼼臓部となるクラス ・「誰が(Subject)」「何を(Action)」「どうする」という認可のルール、ポリシーを詰め込んだオ ブジェクト ・アプリケーション側では、「ability.can('update', 'Article')」 などと問いかけるだけで、  複雑な条件分岐なしに権限判定を⾏うことが可能 Abilityとは? TypeScriptによるポリシー定義 19

Slide 20

Slide 20 text

型定義とAbilityの構築 Prismaの型をそのままSubjectとして利⽤可能 © PeopleX Inc. 20

Slide 21

Slide 21 text

ポリシーファクトリ ポリシーを動的に定義(実際にはロールと権限のペアを別ファイルで宣⾔的に管理) © PeopleX Inc. 21

Slide 22

Slide 22 text

CASLによる認可フロー リクエスト受信からデータ取得までの⼀連の流れ STEP 1 UserContext取得 STEP 2 Ability⽣成 STEP 3 Guard/Decorator判定 STEP 4 Prismaクエリ変換 © PeopleX Inc. 22

Slide 23

Slide 23 text

BE実装: APIレベルの制御 (NestJS) Guardとデコレータで宣⾔的に記述可能 © PeopleX Inc. 23

Slide 24

Slide 24 text

BE実装: Prisma CASL 公式の @casl/prisma プラグインを使⽤することで、 定義した Ability を Prisma の where句 として呼び出すだけ © PeopleX Inc. 24

Slide 25

Slide 25 text

BE実装: フィールドレベルの認可 permittedFieldsOf ヘルパーが利⽤可能 © PeopleX Inc. 25

Slide 26

Slide 26 text

FE実装: Canコンポーネント © PeopleX Inc. 26

Slide 27

Slide 27 text

FE実装: 関数呼び出し © PeopleX Inc. 27

Slide 28

Slide 28 text

06 6. 実際に導⼊・運⽤してみた感想 © PeopleX Inc. 28

Slide 29

Slide 29 text

導⼊してよかったポイント © PeopleX Inc. 1. TypeScriptによる認可ロジックの宣⾔的定義 2. Prisma 連携が強⼒ 3. 開発者体験がよい 29

Slide 30

Slide 30 text

⼯夫が必要なポイント © PeopleX Inc. 1. 複雑な条件の制御 2. 型定義の複雑さ 3. SQLの複雑化 30

Slide 31

Slide 31 text

Summary まとめ © PeopleX Inc. 31

Slide 32

Slide 32 text

32 ・・・に入る前に、宣伝 🙏

Slide 33

Slide 33 text

We are hiring!! @2025 PeopleX Inc. 6 https://engineer-entrance.peoplex.jp/

Slide 34

Slide 34 text

テックブログ @ 2025 PeopleX Inc. 29 https://zenn.dev/p/peoplex_blog

Slide 35

Slide 35 text

PeopleX HR momentum 2025 @2025 PeopleX Inc. https://corp.peoplex.jp/hr-momentum2025winter 2026年のHRトレンド、⼈事組織におけるAI活⽤など、年末を締めくくるイベント

Slide 36

Slide 36 text

Summary まとめ © PeopleX Inc. 36

Slide 37

Slide 37 text

@ 2025 PeopleX Inc. ・BtoB SaaSの認可は複雑 ・認可の導⼊をサポートしてくれるSaaSやOSSなどアプローチが複数ある ・組織やアーキテクチャに沿った技術選定をすることで、すばやく実装し、メンテナンス性⾼く維持するこ とができる ・TypeScript / Next.js / NestJS / Prisma を採⽤しているアーキテクチャにおいては、CASLが有⼒候補 まとめ① 37

Slide 38

Slide 38 text

@ 2025 PeopleX Inc. 正しい知識を元に、 状況に応じた最適な技術選定を⾏い、 プロダクトのコアバリューの開発に集中しよう まとめ② 38

Slide 39

Slide 39 text

39