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
620
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
380
エンジニアのキャリア論
bumptakayuki
1
210
地方カンファレンス主催のススメ
bumptakayuki
1
220
Laravelで敢えて試す脆弱性のある書き方
bumptakayuki
2
1.2k
地方でのPHPエンジニア採用って実際どうなの?
bumptakayuki
0
690
沖縄観光、名物を一挙紹介!
bumptakayuki
2
680
Laravel ShiftでLaravelのバージョンアップしてみた話
bumptakayuki
1
2.9k
flutterでイベントアプリを作ってみた
bumptakayuki
0
160
オフショア開発の辛みと学んだ事
bumptakayuki
0
400
Other Decks in Programming
See All in Programming
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
110
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.1k
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
330
Claude Agent SDK を使ってみよう
hyshu
0
1.4k
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
250
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
530
ALL CODE BASE ARE BELONG TO STUDY
uzulla
27
6.7k
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
800
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
310
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
240
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
490
理論と実務のギャップを超える
eycjur
0
180
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
BBQ
matthewcrist
89
9.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Speed Design
sergeychernyshev
32
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
GitHub's CSS Performance
jonrohan
1032
470k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
How to Ace a Technical Interview
jacobian
280
24k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
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
ɾϑϩϯτଆͰϩάΠϯͷνΣοΫͱϝχϡʔͷ ग़͠༁ΛΔͱεύήςΟʹͳΔͷͰɺ ෳࡶͳνΣοΫόοΫΤϯυଆͰΖ͏ʂ ·ͱΊ