Access control level

Limit access by group with the ACL plugin: Admin and User groups for the /admin, /api and / routes.

episode
ตอนที่ 12 จาก 20
read
อ่าน 3 นาที

ปกติแล้วเราจะมี services หลายๆตัว และมี api หลายๆเส้น

ถ้าเราให้ user ที่ผ่านการ Authen มาแล้ว เข้ามาใช้งาน API เส้นไหนก็ได้ มันก็คงจะไม่ดีนัก ปกติเราก็มักจะจำกัดการใช้งานในบาง user ไว้ ให้ใช้ได้ในบาง service หรือบาง api

ACL จะมาช่วยเราทำตรงนี้แหละ

เราจะสร้าง Group ขึ้นมา แล้วเอา User ไปใส่ใน Group อีกที แล้วก็จะจำกัดการใช้งานระดับ Group แทน

Goal

มาตั้งเป้าหมายกันก่อน ตอนนี้เรามี services อยู่ 3 ตัว

  1. React
  2. Backend
  3. Next

เราจะสร้าง Group มา 2 Groups

NoGroup NameAccess to /adminAccess to /apiAccess to /
1Admin✅✅❌
2User❌❌✅

โดย 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 จิ้มเลย