Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-f...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
urmot
July 18, 2024
Technology
4
1.8k
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-for-ddd-and-kotlin-implement-pattern
urmot
July 18, 2024
Tweet
Share
More Decks by urmot
See All by urmot
ログラスを支える設計標準について / loglass-design-standards
urmot
12
2.9k
ログラスを支える技術的投資の仕組み / loglass-technical-investment
urmot
10
6.1k
実践!CloudFormation Best Practice ~CloudFormationで始める組織改革~
urmot
2
3.5k
CircleCIを導入した話
urmot
0
100
SPA on AWS
urmot
0
220
実践!CloudFormation Best Practice
urmot
0
260
RDBのログを取る時にDMSを使うという選択肢
urmot
0
150
ベンチャー企業のインフラを運用して学んだ99のこと
urmot
0
1.3k
Other Decks in Technology
See All in Technology
"共通化"と"Embed"のブレンドでスケール可能な運用を!M&Aを支えるGENDA SREの実践 / GENDA Tech Talk #3
genda
0
150
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
4
900
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
150
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
5
270
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
1
200
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
430
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
130
AI駆動開発を事業のコアに置く
tasukuonizawa
1
1.4k
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
220
チーム開発の基礎_研究を事業につなげるために
cyberagentdevelopers
PRO
0
280
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
270
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
250
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
We Are The Robots
honzajavorek
0
170
Google's AI Overviews - The New Search
badams
0
920
Context Engineering - Making Every Token Count
addyosmani
9
670
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
280
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
740
Designing Powerful Visuals for Engaging Learning
tmiket
0
240
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
First, design no harm
axbom
PRO
2
1.1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
77
Transcript
1 ©2024 Loglass Inc. DDDにおける認可の扱いと Kotlinでの実装パターン 2024.7.18 Server-side Kotlin Night
Yuta Muramoto / Loglass, Inc.
2 2 ©2024 Loglass Inc. 株式会社ログラス 開発部 エンジニア 村本 雄太
/ Yuta Muramoto (@urmot2) 自己紹介 株式会社ログラスでLoglass⼈員計画という新規プロダクトの開発をし ています。 普段はKotlin + SpringBootで開発しており、Kotlin Festでは「認可 x DDD」という内容でプロポーザルを出したが、お⾒送りになったの で、今回リベンジさせてもらいます。
3
4 ©2024 Loglass Inc. 認可について
5 ©2024 Loglass Inc. 5 認可について 認可は操作を実行する許可を出すため仕組み 例: ブログ投稿サービス
• 権限(Permission): 投稿者はポストを編集できる。 • 認可(Authorization): ユーザーがポストを編集する権限があれば許可し、なければ拒否する。
6 ©2024 Loglass Inc. 6 認可について よくあるパターン
7 ©2024 Loglass Inc. 7 認可について 認可処理はどのように書くべき? • よくあるパターンで書く?
• ライブラリを利用する? • DDDを採用している場合は? • マイクロサービスではどうあるべき?
8 ©2024 Loglass Inc. 8 認可について 認可処理はどのように書くべき? • よくあるパターンで書く?
• ライブラリを利用する? • DDDを採用している場合は? • マイクロサービスではどうあるべき?
9 ©2024 Loglass Inc. DDDにおける認可について
10 ©2024 Loglass Inc. DDDにおける認可について 実践ドメイン駆動設計が認可についてしっかり書かれていた
11 11 ©2024 Loglass Inc. しかし彼らはモデルには明確な制限があって、それ以上に広げ すぎては行けないということを理解していなかった。その結果、 セキュリティや権限の情報をコラボレーションモデルに組み込 んでしまうという、間違いを犯してしまった。 (中略)
つまりそれは、二つのモデルをひとつに混ぜ込んでしまうという ことだ。程なく彼らも気がついた。この混乱する状況は、セキュリ ティについての関心事をコアドメインに混ぜ込んだことに起因す るものである。まさに コアビジネスロジックのど真ん中で、開発 者がクライアントの権限をチェックしてからリクエストを処理し ていたのだ。 by 実践ドメイン駆動設計 第2章「ドメイン、サブドメイン、境界づ けられたコンテキスト」 DDDにおける認可について
12 12 ©2024 Loglass Inc. DDDにおける認可について
13 13 ©2024 Loglass Inc. DDDにおける認可について
14 ©2024 Loglass Inc. 14 DDDにおける認可について 最終的に認可に関する関心事をコアドメインから分離している
15 ©2024 Loglass Inc. 認可のベストプラクティスでは?
16 ©2024 Loglass Inc. 認可のベストプラクティスでは?
17 17 ©2024 Loglass Inc. 認可のベストプラクティスでは? 承認はすべてのアプリケーションにとって重要な要素ですが、ユーザー にはほとんど見えません。 また、通常はコア機能やビジネスロジックとは無関係です
。 https://www.osohq.com/academy/what-is-authorization
18 18 ©2024 Loglass Inc. 認可のベストプラクティスでは? 承認はすべてのアプリケーションにとって重要な要素ですが、ユーザー にはほとんど見えません。 また、通常はコア機能やビジネスロジックとは無関係です
。 https://www.osohq.com/academy/what-is-authorization 上記にはさまざまな順列や組み合わせがありますが、ほとんどのアプ リケーションでは通常、次の設定をお勧めします。 1. 認証を処理するには、ID プロバイダーを使用します。 2. アプリケーション自体で認証を強制します。 3. 承認インターフェースを追加して、 承認ロジックをアプリケーショ ンコードから分離します。 https://www.osohq.com/academy/what-is-authorization
19 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法
20 ©2024 Loglass Inc. 20 認可について 認可処理はどのように書くべき? • よくあるパターンで書く?
• ライブラリを利用する? • DDDを採用している場合は? • マイクロサービスではどうあるべき?
21 21 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 例: ブログ管理サービス ブログ管理サービスの認可ロジックは以下の通りです。
• チーム内にブログを投稿できるのはチームメンバーのみ • プライベートな記事はチームのメンバーだけが閲覧可能
22 22 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 1. 共通interfaceを使うパターン
23 23 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 共通interfaceを使うパターン
24 24 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 1. 共通interfaceの実装
25 25 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 1. 共通interfaceを使うUseCase
26 26 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 利点: ドメインロジックに認可ロジックが入りこまない (分離できる )
27 ©2024 Loglass Inc. Kotlinで認可ロジックを分離する方法 欠点: 認可処理を強制できない
28 ©2024 Loglass Inc. 28 Kotlinで認可ロジックを分離する方法 2. Authorizedモナドを利用するパターン
29 ©2024 Loglass Inc. 29 Kotlinで認可ロジックを分離する方法 Authorized<T> は Authorizer 経由でしか作成できない
30 ©2024 Loglass Inc. 30 Kotlinで認可ロジックを分離する方法 認可処理の実装は各コンテキストの packageに配置
31 ©2024 Loglass Inc. 31 Kotlinで認可ロジックを分離する方法 Repositoryの引数を Allowed<T> にする
32 ©2024 Loglass Inc. 32 Kotlinで認可ロジックを分離する方法 利点: 認可処理を実行しないと saveメソッドが呼び出せない!
33 ©2024 Loglass Inc. まとめ
34 34 ©2024 Loglass Inc. まとめ 認可ロジックはコアドメインから分離する! • IDDD本でも、Oso Authorization
Academyでも認可ロジックの分離を推奨しています • 認可ロジックを分離する方法として以下を紹介しました a. 共通interfaceパターン b. Authorizedモナド • 認可ロジックは取得系のほうが考えることが多く難しいです • Spring Securityなどのライブラリを利用することでうまく分離可能な場合もあります • ユースケースやプロダクトの状況に合わせて最適な実装方法を選択する必要は依然としてある
35