Access control level
Limit access by group with the ACL plugin: Admin and User groups for the /admin, /api and / routes.
- series
- Kong Workshop
- episode
- ตอนที่ 12 จาก 20
- read
- อ่าน 3 นาที
ปกติแล้วเราจะมี services หลายๆตัว และมี api หลายๆเส้น
ถ้าเราให้ user ที่ผ่านการ Authen มาแล้ว เข้ามาใช้งาน API เส้นไหนก็ได้ มันก็คงจะไม่ดีนัก ปกติเราก็มักจะจำกัดการใช้งานในบาง user ไว้ ให้ใช้ได้ในบาง service หรือบาง api
ACL จะมาช่วยเราทำตรงนี้แหละ
เราจะสร้าง Group ขึ้นมา แล้วเอา User ไปใส่ใน Group อีกที แล้วก็จะจำกัดการใช้งานระดับ Group แทน
Goal
มาตั้งเป้าหมายกันก่อน ตอนนี้เรามี services อยู่ 3 ตัว
- React
- Backend
- Next
เราจะสร้าง Group มา 2 Groups
| No | Group Name | Access to /admin | Access to /api | Access to / |
|---|---|---|---|---|
| 1 | Admin | ✅ | ✅ | ❌ |
| 2 | User | ❌ | ❌ | ✅ |
โดย Admin group จะเข้า /admin ได้ เข้า /api ได้
ส่วน User group จะเข้า / ได้อย่างเดียว
Admin group for /admin & /api
เราจะมาทำ admin group กันก่อน
01. Path /admin
เราจะปกป้อง /admin ก็มาที่ตรงนี้

เราต้องมี Basic Auth ด้วย
ใครยังไม่มีก็ใส่ก่อนนะ

จากนั้นก็เพิ่ม Plugin ACL

จากนั้นก็ใส่ group name ที่อนุญาตให้เข้ามาได้ ใส่ชื่อไปก่อน เดี๋ยวมาสร้าง group ทีหลัง
สามารถใส่ได้หลาย group เลยนะ
ในที่นี้ใส่แค่ admin
อย่าลืมกด Save

แล้วจะได้แบบนี้

Admin consumer
ต่อมาก็เพิ่ม Consumer ที่ชื่อ Admin

เพิ่ม Admin consumer ได้เลย ไม่ทำให้ดูละ
จากนั้นก็เข้ามาเพิ่ม Basic Auth ก่อน เอาง่ายๆที่ Basic Auth นี่แหละ ถ้าใครชอบวิธีอื่นก็ไม่ติด ลองเล่นๆกันดูได้

จากนั้นก็ใส่ Username + Password

จะได้แบบนี้

ต่อมาเราจะให้ Admin consumer เข้าไปอยู่ใน ACL group ที่ชื่อว่า admin


แล้วลองเข้าไปที่ admin.myweb.com:8000/
ถ้าอยาก logout จิ้มเลย แล้วต้องปิด tab นะ tab นี้ใช้ไม่ได้ละ
02. Path /api
ทีนี้ก็มาทำ API
ทุกคนก็ลองไปทำกันดูนะ
เฉลย
มี Jwt plugin อยู่ก่อนแล้ว เราก็จะใช้อันนี้แหละ
User Group for /
มาใส่ ACL plugin ให้กับ route /
กันก่อน




จะได้แบบนี้

ลองเปิดไปที่ localhost:8000 จะเข้าไม่ได้ละ
จะเจอหน้าแบบนี้

เราก็ต้องเพิ่ม Basic Auth ด้วย เพราะไม่งั้นก็จะไม่มีทาง login ได้เลย
ลองเปิดไปที่ localhost:8000
แต่ก็ยังไม่มี username + password เลย ไปขั้นตอนต่อไป
User Consumer
มาสร้าง User group กัน


จะได้แบบนี้

จากนั้นก็ใส่ credential ให้กับ User consumer



จะได้แบบนี้

ทีนี้ก็เพิ่ม ACL User Group ให้กับ Consumer User


จะได้แบบนี้

ลองเปิดไปที่ localhost:8000
Logout
React
เผื่อใครอยาก logout click เลย เสร็จแล้วจะต้องปิด tab นะ tab นั้นจะใช้ไม่ได้ละ
Admin
ถ้าอยาก logout จิ้มเลย