<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/feed.rss.xml" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>aster-mnch (kitagawa)</title>
    <description></description>
    <link>https://speakerdeck.com/mnch</link>
    <atom:link rel="self" type="application/rss+xml" href="https://speakerdeck.com/mnch.rss"/>
    <lastBuildDate>2026-05-22 01:43:23 -0400</lastBuildDate>
    <item>
      <title>権限チェックの一貫性を型で守る TypeScript による多層防御</title>
      <description>TSKaigi 2026 発表スライド
株式会社フライル / 北川 直昭
https://2026.tskaigi.org/talks/9

---

私たちのプロダクトでは、ユーザーがテーブルやワークフローなどのリソースをフォルダ階層の中に自由に構築できるデータベースシステムを提供しています。
この柔軟性から認可の設計は複雑になり、「誰が」「どのリソースに」「何をできるか」を階層構造に沿って制御する必要があります。
この権限チェックはフロントエンド・バックエンド・データベースの全レイヤーに及ぶため、あるレイヤーで分岐の修正を忘れる「静かなバグ」が生まれやすく、テストもすり抜けがちです。

本セッションでは、権限アクションの SSoT を定義し、TypeScript における型レベルの制約や網羅性チェックを組み合わせることで、システム全体で権限チェックの一貫性を保つアーキテクチャを紹介します。</description>
      <media:content url="https://files.speakerdeck.com/presentations/6dc69a6a4b9845ed811a3d831dc376b1/preview_slide_0.jpg?39487846" type="image/jpeg" medium="image"/>
      <content:encoded>TSKaigi 2026 発表スライド
株式会社フライル / 北川 直昭
https://2026.tskaigi.org/talks/9

---

私たちのプロダクトでは、ユーザーがテーブルやワークフローなどのリソースをフォルダ階層の中に自由に構築できるデータベースシステムを提供しています。
この柔軟性から認可の設計は複雑になり、「誰が」「どのリソースに」「何をできるか」を階層構造に沿って制御する必要があります。
この権限チェックはフロントエンド・バックエンド・データベースの全レイヤーに及ぶため、あるレイヤーで分岐の修正を忘れる「静かなバグ」が生まれやすく、テストもすり抜けがちです。

本セッションでは、権限アクションの SSoT を定義し、TypeScript における型レベルの制約や網羅性チェックを組み合わせることで、システム全体で権限チェックの一貫性を保つアーキテクチャを紹介します。</content:encoded>
      <pubDate>Fri, 22 May 2026 00:00:00 -0400</pubDate>
      <link>https://speakerdeck.com/mnch/quan-xian-tietukuno-guan-xing-woxing-deshou-ru-typescript-niyoruduo-ceng-fang-yu</link>
      <guid>https://speakerdeck.com/mnch/quan-xian-tietukuno-guan-xing-woxing-deshou-ru-typescript-niyoruduo-ceng-fang-yu</guid>
    </item>
  </channel>
</rss>
