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
PRO
September 07, 2021
Programming
1
440
Nuxt.jsのmiddlewareを使って権限チェックしたらスパゲティになってしまった話
Nuxt.jsのmiddlewareを使って権限チェックしたらスパゲティになってしまった話
Takayuki
PRO
September 07, 2021
Tweet
Share
More Decks by Takayuki
See All by Takayuki
地方カンファレンス主催のススメ
bumptakayuki
PRO
1
93
Laravelで敢えて試す脆弱性のある書き方
bumptakayuki
PRO
1
260
地方でのPHPエンジニア採用って実際どうなの?
bumptakayuki
PRO
0
350
沖縄観光、名物を一挙紹介!
bumptakayuki
PRO
2
380
Laravel ShiftでLaravelのバージョンアップしてみた話
bumptakayuki
PRO
1
910
flutterでイベントアプリを作ってみた
bumptakayuki
PRO
0
86
オフショア開発の辛みと学んだ事
bumptakayuki
PRO
0
300
ChatGPTにStripeのサンプルコードを書かせてみた
bumptakayuki
PRO
1
130
ChatGPTに記事を書かせてみた
bumptakayuki
PRO
1
200
Other Decks in Programming
See All in Programming
document.write再考
brn
5
1.9k
PHPでOfficeファイルを取り扱う! PHP Officeライブラリを プロダクトに組み込んだ話
hirobe1999
0
730
Some Quick Ideas To Improve Your Tests ( #jassttokyo )
teyamagu
PRO
2
2k
GitHub Copilot Tips and Tricks
yuichielectric
2
240
オープンなデータ・ソフトウェアを活用した開発
404background
0
160
Learning Ruby
okuramasafumi
5
370
PHP8の機能を使って堅牢にコードを書く
fendo181
6
2k
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
2
190
Cloudflare Workersの環境を再現することについて
yusukebe
5
730
上手な探索的テストとその上達方法について
matsu802
1
430
Deep Dive 大規模システムアーキテクチャ/開発組織エンジニアリング / Deep Dive Large-Scale System Architecture, Development Organization Engineering
nrslib
4
430
開発者体験を変えるInfrastructure as Codeの新機能6選!
konokenj
4
850
Featured
See All Featured
Code Review Best Practice
trishagee
54
15k
Building Applications with DynamoDB
mza
88
5.5k
Automating Front-end Workflow
addyosmani
1353
200k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
How To Stay Up To Date on Web Technology
chriscoyier
781
250k
The Invisible Customer
myddelton
114
12k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
1.9k
Building Effective Engineering Teams - LeadDev
addyosmani
25
1.6k
Faster Mobile Websites
deanohume
296
30k
The Language of Interfaces
destraynor
150
22k
Adopting Sorbet at Scale
ufuk
66
8.5k
Ruby is Unlike a Banana
tanoku
95
10k
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
ɾϑϩϯτଆͰϩάΠϯͷνΣοΫͱϝχϡʔͷ ग़͠༁ΛΔͱεύήςΟʹͳΔͷͰɺ ෳࡶͳνΣοΫόοΫΤϯυଆͰΖ͏ʂ ·ͱΊ