凝集性から考えるLaravelのmiddleware、routingに書くか? Policyに書くか?
by
NewNomad
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
から考えるLaravelの middleware、 に書くか? に書くか? PHPカンファレンス福岡2024 凝集性 routing Policy @NobleNomad
Slide 2
Slide 2 text
1. 自己紹介
Slide 3
Slide 3 text
自己紹介
Slide 4
Slide 4 text
結論 Entityごとに対する操作で認可行う → Enittyの凝集性が高まる
Slide 5
Slide 5 text
その前に... LARAVELの認証 について
Slide 6
Slide 6 text
認可? POLICY? 🧐
Slide 7
Slide 7 text
前提知識 ユーザーが を実行する権限を持っている かどうかを判断 認可とは? 01 に対する認可を管理 Policyとは? 02 特定のアクション 特定のモデル
Slide 8
Slide 8 text
Policyの紹介 Policyは に対する認可を管理できる 特定のモデル
Slide 9
Slide 9 text
Policyの紹介 Policyは に対する認可を管理できる 特定のモデル
Slide 10
Slide 10 text
Policyの紹介 Policyは に対する認可を管理できる 特定のモデル (リクエスト元の)ユーザ自分自身のみがユーザを閲覧できる
Slide 11
Slide 11 text
2. Laravel認可の 基本
Slide 12
Slide 12 text
2. Laravel認可の基本 Gateファサード経由 の認可 routingに書く Middleware の認可
Slide 13
Slide 13 text
2. Laravel認可の基本 Gateファサード経由 の認可 routingに書く Middleware の認可
Slide 14
Slide 14 text
routingに書く Middlewareの認可 Laravelでは特定のユーザだけがアクセスできるように設定を Routingに直接記載できる
Slide 15
Slide 15 text
Laravelでは特定のユーザだけがアクセスできるように設定を Routingに直接記載できる routingに書く Middlewareの認可
Slide 16
Slide 16 text
Laravelでは特定のユーザだけがアクセスできるように設定を Routingに直接記載できる 認証済みの人のみアクセスできる routingに書く Middlewareの認可
Slide 17
Slide 17 text
2. Laravel認可の基本 Gateファサード経由 の認可 routingに書く Middleware の認可
Slide 18
Slide 18 text
Gateファサード経由 の認可 簡単に の認可ロジックを定義できます。 カスタム
Slide 19
Slide 19 text
Gateファサード経由 の認可 簡単に の認可ロジックを定義できます。 カスタム
Slide 20
Slide 20 text
3. それぞれの メリット・デメリット
Slide 21
Slide 21 text
3. それぞれのメリット・デメリット Gateファサード経由 の場合 routing記載 の場合
Slide 22
Slide 22 text
3. それぞれのメリット・デメリット Gateファサード経由 の場合 routing記載 の場合
Slide 23
Slide 23 text
routingファイルに認可を書く 場合の問題点 routingファイルが複雑化 認可ロジックも含んでしまう デメリット routingに全部かいてある メリット
Slide 24
Slide 24 text
3. それぞれのメリット・デメリット Gateファサード経由 の場合 routing記載 の場合
Slide 25
Slide 25 text
routingファイルに認可を書く 場合の問題点 定義した数だけ増える 管理が命名方法に依存 デメリット 認可ロジックがGate定義 に集中 メリット
Slide 26
Slide 26 text
じゃあ認可の責務がど こにあるべきか?
Slide 27
Slide 27 text
凝集性を 高めるためには?
Slide 28
Slide 28 text
認可ロジックは操作の近 くにあるといいかも
Slide 29
Slide 29 text
前提知識 ユーザーが を実行する権限を持っている かどうかを判断 認可とは? 01 に対する認可を管理 Policyとは? 02 特定のアクション 特定のモデル
Slide 30
Slide 30 text
4. を 使った認可の設計 ValueObject・Entity
Slide 31
Slide 31 text
対象プロダクトについて レイヤードアーキテクチャ + DDD(一部アレンジ)
Slide 32
Slide 32 text
対象プロダクトについて レイヤードアーキテクチャ + DDD(一部アレンジ) ValueObject・Entityが ドメインを表している (Service層・DomainService層が存在しない)
Slide 33
Slide 33 text
ドメインに対する操作 = ValueObject・Entityに対するそう
Slide 34
Slide 34 text
ここで認可のおさらい
Slide 35
Slide 35 text
前提知識 に対する認可を管理 Policyとは? 02 特定のアクション ユーザーが を実行する権限を持っている かどうかを判断 認可とは? 01 特定のモデル
Slide 36
Slide 36 text
Entityごとに対する操作で 認可行う → Entityの凝集性が高まるのでは?
Slide 37
Slide 37 text
いつ認可を行うか
Slide 38
Slide 38 text
対象プロダクトについて .2 ルーティングパラメータからEntityをbindしている GET: /{user}/profile UserEntityを取得し、ControllerへDI
Slide 39
Slide 39 text
対象プロダクトについて .2 ルーティングパラメータからEntityをbindしている GET: /{user}/profile UserEntityを取得し、ControllerへDI このタイミングで認可
Slide 40
Slide 40 text
5. まとめ
Slide 41
Slide 41 text
まとめ Entityごとに対する操作で認可行う Enittyの凝集性が高まる いつ認可を行うか bindingするタイミング?