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
Nuxt.jsのmiddlewareを使って権限チェックしたらスパゲティになってしまった話
Search
Takayuki
September 07, 2021
Programming
1
600
Nuxt.jsのmiddlewareを使って権限チェックしたらスパゲティになってしまった話
Nuxt.jsのmiddlewareを使って権限チェックしたらスパゲティになってしまった話
Takayuki
September 07, 2021
Tweet
Share
More Decks by Takayuki
See All by Takayuki
Laravel × Clean Architecture
bumptakayuki
0
180
エンジニアのキャリア論
bumptakayuki
0
170
地方カンファレンス主催のススメ
bumptakayuki
1
200
Laravelで敢えて試す脆弱性のある書き方
bumptakayuki
2
1k
地方でのPHPエンジニア採用って実際どうなの?
bumptakayuki
0
630
沖縄観光、名物を一挙紹介!
bumptakayuki
2
620
Laravel ShiftでLaravelのバージョンアップしてみた話
bumptakayuki
1
2.5k
flutterでイベントアプリを作ってみた
bumptakayuki
0
150
オフショア開発の辛みと学んだ事
bumptakayuki
0
380
Other Decks in Programming
See All in Programming
Parallel::Pipesの紹介
skaji
2
890
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
0
190
テスト分析入門/Test Analysis Tutorial
goyoki
13
2.8k
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
340
Interface vs Types ~型推論が過多推論~
hirokiomote
1
240
コンポーネントライブラリで実現する、アクセシビリティの正しい実装パターン
schktjm
1
710
Agent Rules as Domain Parser
yodakeisuke
1
440
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
1.1k
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
2
340
セキュリティマネジャー廃止とクラウドネイティブ型サンドボックス活用
kazumura
1
150
カクヨムAndroidアプリのリブート
numeroanddev
0
230
少数精鋭エンジニアがフルスタック力を磨く理由 -そしてAI時代へ-
rebase_engineering
0
150
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
860
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
7
640
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Music & Morning Musume
bryan
47
6.6k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Writing Fast Ruby
sferik
628
61k
What's in a price? How to price your products and services
michaelherold
245
12k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
GraphQLとの向き合い方2022年版
quramy
46
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
Agile that works and the tools we love
rasmusluckow
329
21k
Transcript
middlewareを使ってݖ限チェックし たらスパゲティになってしまった話 鈴木孝之
"HFOEB ࣗݾհ ࣮ݱ͔༷ͨͬͨ͠ ࣮ࡍʹ࣮ͨ͠ߏ ࣦഊΛ௨ͯ͠ͷվળࡦ
ࣗݾհɾձࣾհ
Copyright Re:Build.inc All Rights Reserved. ࣗݾհ 1 ◆໊લ ླ ೭(Suzuki
Takayuki) ※ಉಉ໊ଟͯ͘ࠔͬͯ·͢ɻɻɻ ◆ࣗݾհ ɾ1990ੜ·Εɻ ɾԭೄͰىۀͯ͠3ɻ ɾPHPΧϯϑΝϨϯεԭೄ࣮ߦҕһɺ ϑϩϯτΤϯυΧϯϑΝϨϯεԭೄ࣮ߦҕһ ◆झຯ ίεϓϨɺԻָϥΠϒɺϚϥιϯେձʹग़Δɺٿ؍ઓ BDD(Ϗʔνۦಈ։ൃ)
Copyright Re:Build.inc All Rights Reserved. ࣗݾհ 1
Copyright Re:Build.inc All Rights Reserved. ձࣾհ 1 ◆ձ໊ࣾ גࣜձࣾRe:Build ◆ॅॴ
ԭೄݝಹࢢٱໜ2-2-2 λΠϜεϏϧ ◆ࣄۀ༰ ɾࣗࣾWEBαʔϏεͷاըɾ։ൃɻ ɾडୗ։ൃ ◆ࣾһ 10໊ ◆ΤϯδχΞͷಇ͖ํ ϦϞʔτϫʔΫՄೳͳࣗ༝ͳಇ͖ํΛਪͯ͠·͢ʂ
Copyright Re:Build.inc All Rights Reserved. 7 ɾαʔϏε໊ Tadoru https://tadoru.work/
ɾγεςϜ֓ཁ ΤϯδχΞಛԽܕͷ ϦϑΝϥϧ Ϋϥυιʔγϯά 1 ձࣾհ
Copyright Re:Build.inc All Rights Reserved. 8 ɾαʔϏε໊ Re:Build Boot Camp
https://rebuild-bootcamp.jp/ ɾ֓ཁ ԭೄͱٶ࡚Ͱʮ࣮ϨϕϧʯΛ ࢦ͢ํ͚ͷϓϩάϥϛϯάε Ϋʔϧ ɾ͏ٕज़ LaravelɺVue.jsͳͲ 1 ձࣾհ
Copyright Re:Build.inc All Rights Reserved. 9 https://macloud.jp/interviews/25 1 ձࣾհ M&AΫϥυΛͬͯɺ
ࢿۚௐୡ͖ͤͯ͞·ͨ͠ʂʂ
࣮ݱ͔༷ͨͬͨ͠
࣮ݱ͔༷ͨͬͨ͠ ྫ ར༻ݖݶ ɾ্ڃձһݖݶ ɾதڃձһݖݶ ɾҰൠϝϯόʔݖݶ
࣮ݱ͔༷ͨͬͨ͠ ྫ ৬Φϓγϣϯݖݶ ɾһݖݶ ɾ՝ݖݶ ɾ෦ݖݶ ར༻ݖݶ ɾ্ڃձһݖݶ ɾதڃձһݖݶ ɾҰൠϝϯόʔݖݶ
࣮ݱ͔༷ͨͬͨ͠ ྫ ։ൃޙͰ͍͖ͳΓݖݶͷ༷͕Ճ ͞Εͯɺෳࡶʹͳ͍ͬͯͬͨ…ʂ
࣮ݱ͔༷ͨͬͨ͠ ྫ
࣮ݱ͔༷ͨͬͨ͠ ྫ ࡉ͔͗ͯ͢༁Θ͔ΒΜʂʂ
ݖݶ੍ޚͷΠϝʔδ ݖݶ͝ͱͰϝχϡʔ Λ੍ޚ
࣮ࡍʹ࣮ͨ͠ߏ
ϑϩϯτΤϯυ ϑϩϯτΤϯυͷϩάΠϯॲཧϑϩʔ APIϦΫΤετ αʔόαΠυ JSON͕ฦ٫͞ΕΔ Component /login Routing Middleware permission
{ ɾɾɾ } JSONͷྫ HTML CSS JS ɾϩάΠϯ࣌ʹݖݶΛνΣο Ϋ͢Δɻ ɾݖݶʹԠͯ͡ϦμΠϨΫτ localStrage ݖݶใΛอ࣋ ݖݶΛऔಘ αʔόαΠυଆͰ ϩάΠϯॲཧΛ࣮ߦ ݖݶใΛऔಘɻ ϒϥβ͔ΒΞΫηε͠ɺ ϢʔβIDͱύεϫʔυΛೖྗ ݖݶΛઃఆ Database request.ts response.ts Types Libs/api/index.ts
σΟϨΫτϦ ϛυϧΣΞ
࣮Πϝʔδ auth.js const permissions = { 'employee': { general: [
'/admin/organization', '/admin/account' ] }, 'admin': { general: [ '/admin/organization', '/admin/account', '/admin/analysis' ] } } // URL͕اۀཧը໘ͷ߹ if (fullPath.startsWith('/admin')) { if (permissions === 'admin') { // μογϡϘʔυ redirect('/admin'); } // URL͕ैۀһը໘ͷ߹ } else if (fullPath.startsWith('/user')) { if (permissions === 'admin') { // μογϡϘʔυ redirect('/user'); } } ݖݶʹԠͨ͡ӾཡՄೳͳURL ఆΛ·ͱΊͨϑΝΠϧ ݖݶ͝ͱʹӾཡՄೳ ͳURL܈Λఆٛ
࣮Πϝʔδ ݖݶʹԠͨ͡ӾཡՄೳͳURL ఆΛ·ͱΊͨϑΝΠϧ auth.js const permissions = { 'employee': {
general: [ '/admin/organization', '/admin/account' ] }, 'admin': { general: [ '/admin/organization', '/admin/account', '/admin/analysis' ] } } // URL͕اۀཧը໘ͷ߹ if (fullPath.startsWith('/admin')) { if (permissions === 'admin') { // μογϡϘʔυ redirect('/admin'); } // URL͕ैۀһը໘ͷ߹ } else if (fullPath.startsWith('/user')) { if (permissions === 'admin') { // μογϡϘʔυ redirect('/user'); } } ݖݶ੍ޚใ Λࢀর
ݖݶ੍ޚͷΠϝʔδ ϝχϡʔͷComponentͷ ϑΝΠϧ ͲͷݖݶΛ͍࣋ͬͯΔ͔Ͱ ϝχϡʔͷදࣔɾඇදࣔΛ ੍ޚ͢Δɻ ݖݶʹԠͯ͡ifจͰग़͠Θ͚
ɾՃͰ৽͍͠ݖݶͷ֓೦͕ग़͖ͯͨࡍʹ͞ΒʹifจࠈʹͳΔ ɾ৽͍͠ݖݶ͕૿͑ͨ࣌ʹϝχϡʔͷදࣔɾඇදࣔͷ੍ޚ͕ ͘͠ͳΔɻ
ࣦഊΛ௨ͯ͠ͷվળࡦ
վળࡦ ɾόοΫΤϯυଆͰࡉ͔͍ݖݶͷ੍ޚϩδοΫΛॻ͘ ɾϏοτԋࢉͰෳͷݖݶΛҰҙʹදݱ͢Δ ɾϝχϡʔͷදࣔɾඇදࣔόοΫΤϯυଆͰผͯ͠ɺJSON Ͱฦ٫͠ɺϑϩϯτଆͰͦͷJSONΛݩʹϝχϡʔͷग़͚͠ Λߦ͏ɻ
ݖݶͷमਖ਼Πϝʔδ ৬Φϓγϣϯݖݶ ɾһݖݶ ɾ՝ݖݶ ɾ෦ݖݶ ར༻ݖݶ ɾ্ڃձһݖݶ ɾதڃձһݖݶ ɾҰൠϝϯόʔݖݶ ݖݶͷΈ߹ΘͤΛ
ϏοτԋࢉͰදݱ͢ Δ 000001 000010 000100
ɾϑϩϯτଆͰϩάΠϯͷνΣοΫͱϝχϡʔͷ ग़͠༁ΛΔͱεύήςΟʹͳΔͷͰɺ ෳࡶͳνΣοΫόοΫΤϯυଆͰΖ͏ʂ ·ͱΊ