Groups
Group กับ role ต่างกันอย่างไร
หัวข้อที่มีชื่อว่า “Group กับ role ต่างกันอย่างไร”ใน Keycloak มีสองแนวคิดที่เกี่ยวข้องกันแต่แตกต่างกัน คือ group และ role
- role คือ permission หรือความสามารถ (เช่น
admin,viewer,editor) role จะถูกมอบให้กับ user และถูกตรวจสอบโดยแอปพลิเคชันเพื่อตัดสินว่า user ได้รับอนุญาตให้ทำอะไร - group คือ container สำหรับ user group ไม่ได้มอบ permission ด้วยตัวเอง — แต่ได้รับ permission ผ่าน role ที่ map ไว้กับ group
พลังของการใช้ร่วมกัน: map role ไปยัง group, แล้วเพิ่ม user เข้า group สมาชิกทุกคนของ group จะสืบทอด role ทั้งหมดที่กำหนดให้กับ group นั้นโดยอัตโนมัติ เมื่อคุณต้องการเปลี่ยน permission ให้กับชุดของ user คุณก็อัปเดต role mapping ของ group เพียงครั้งเดียวแทนที่จะต้องไปแตะทุกบัญชี user แต่ละราย
การสร้าง group
หัวข้อที่มีชื่อว่า “การสร้าง group”- ใน admin console ตรวจสอบให้แน่ใจว่าคุณอยู่ใน realm ที่ถูกต้อง (ตรวจสอบจาก drop-down ที่มุมซ้ายบน)
- คลิก Groups ในแถบด้านซ้าย
- คลิก Create group (มุมขวาบนของรายการ group)
- ใส่ Name สำหรับ group (เช่น
developers,support-agents) - คลิก Save
group ใหม่จะปรากฏในรายการ group ตอนนี้ คลิกชื่อของตัวเองเพื่อเปิดหน้ารายละเอียดของ group และเข้าถึงแท็บต่าง ๆ ของตัวเอง
การเพิ่มสมาชิกเข้า group
หัวข้อที่มีชื่อว่า “การเพิ่มสมาชิกเข้า group”- เปิด group จากรายการ Groups
- คลิกแท็บ Members
- คลิก Add member
- ในกล่องค้นหา พิมพ์ username หรืออีเมลเพื่อค้นหา user
- เลือก user แล้วคลิก Add
ตอนนี้ user จะปรากฏในแท็บ Members และสืบทอด role ใด ๆ ที่ map ไว้กับ group นี้ทันที
การ map role ให้กับ group
หัวข้อที่มีชื่อว่า “การ map role ให้กับ group”Role mapping บน group ทำงานเหมือนกับ role mapping บน user แต่ละราย — ความแตกต่างคือสมาชิกของ group ทุกคนทั้งในปัจจุบันและอนาคตจะสืบทอด role ที่ map ไว้โดยอัตโนมัติ
- เปิด group จากรายการ Groups
- คลิกแท็บ Role mapping
- คลิก Assign role
- ใช้กล่องค้นหาเพื่อค้นหา realm role (หรือ client role) ที่คุณต้องการกำหนด
- เลือก role หนึ่งรายการหรือมากกว่าแล้วคลิก Assign
role ที่กำหนดจะแสดงอยู่ภายใต้ role mapping ของ group ตอนนี้ user คนใดก็ตามที่เป็นสมาชิกของ group จะมี role เหล่านี้รวมอยู่ใน token ของพวกเขา
Subgroups
หัวข้อที่มีชื่อว่า “Subgroups”Keycloak รองรับลำดับชั้นของ group subgroup (child group) อยู่ภายใต้ parent group สมาชิกของ subgroup จะสืบทอด role ที่ map ไว้กับ subgroup นั้น — แต่พวกเขาจะไม่สืบทอด role ของ parent group โดยอัตโนมัติ เว้นแต่พวกเขาจะเป็นสมาชิกโดยตรงของ parent ด้วย
วิธีสร้าง subgroup:
- เปิด parent group จากรายการ Groups
- คลิกแท็บ Child groups (หรือ Sub groups ขึ้นอยู่กับเวอร์ชัน Keycloak ของคุณ)
- คลิก Create group
- ใส่ Name สำหรับ child group แล้วคลิก Save
จากนั้นคุณสามารถเพิ่มสมาชิกและ map role ให้กับ subgroup ได้อย่างอิสระจาก parent ทำให้ง่ายต่อการจำลองลำดับชั้นขององค์กร (เช่น engineering → backend, frontend)
Default groups
หัวข้อที่มีชื่อว่า “Default groups”default group คือ group ที่ user ใหม่ทุกคนจะถูกเพิ่มเข้าโดยอัตโนมัติเมื่อสมัครสมาชิกด้วยตนเอง (self-registration) สิ่งนี้มีประโยชน์เมื่อคุณต้องการให้ user ที่ลงทะเบียนใหม่ทั้งหมดเริ่มต้นด้วยชุด role พื้นฐานโดยไม่ต้องให้ผู้ดูแลระบบดำเนินการใด ๆ
วิธีตั้งค่า default group:
- คลิก Realm settings ในแถบด้านซ้าย
- คลิกแท็บ User registration
- ภายใต้ Default groups คลิก Add groups
- เลือก group หนึ่งรายการหรือมากกว่าจากรายการแล้วคลิก Add
user คนใดก็ตามที่ลงทะเบียนผ่าน Keycloak Account Console หรือ self-registration flow จะถูกจัดวางใน default group ทั้งหมดโดยอัตโนมัติ — และจะสืบทอด role ที่ map ไว้กับ group เหล่านั้นด้วย
การตรวจสอบสมาชิกของ group ผ่าน REST API
หัวข้อที่มีชื่อว่า “การตรวจสอบสมาชิกของ group ผ่าน REST API”curl -s -H "Authorization: Bearer ${TOKEN}" http://localhost:8080/admin/realms/my-app/groups/${GROUP_ID}/members | jq .แทนที่ TOKEN ด้วย admin access token ที่ถูกต้อง และ GROUP_ID ด้วย UUID ของ group (มองเห็นได้ใน URL เมื่อคุณเปิด group ใน admin console)
ข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| กำหนด permission ผ่าน group (map role ให้ group แล้วเพิ่ม user เข้า) | อัปเดต role mapping ครั้งเดียวก็มีผลกับสมาชิกทุกคน ย้าย user ระหว่างทีมแค่ย้าย group | ต้องออกแบบโครงสร้าง group ให้ดีตั้งแต่แรก ถ้าวางผิดจะต้อง refactor ทีหลัง |
| กำหนด role แบบ role-by-role ให้ user แต่ละคนโดยตรง | เหมาะกับ exception เฉพาะบุคคลที่ไม่ต้องการให้กระทบคนอื่นใน group | ไม่ scale — เมื่อ permission ของทีมเปลี่ยน ต้องไล่แก้ทุกบัญชีทีละคน เสี่ยงตกหล่น |
| ใช้ default group ให้ user ใหม่เข้าโดยอัตโนมัติ | onboarding ไม่ต้องมีขั้นตอน manual, user ใหม่ได้ role พื้นฐานทันที | ถ้ากำหนด default group ผิดหรือกว้างเกินไป user ใหม่อาจได้ permission เกินความจำเป็น |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- กำหนด role ให้ user ทีละคนแทนที่จะผ่าน group — เมื่อทีมโตขึ้นจะจัดการไม่ไหว ควร map role เข้า group แล้วให้ user สืบทอดผ่านการเป็นสมาชิก
- ลืมว่า subgroup ไม่สืบทอด role ของ parent group โดยอัตโนมัติ — ถ้าคาดหวังให้สมาชิก subgroup ได้ permission ของ parent ด้วย ต้อง map role ซ้ำหรือเพิ่ม user เป็นสมาชิกของ parent ตรง ๆ
- ไม่ตรวจสอบ default groups ก่อนเปิด self-registration — ถ้าลืมตั้งหรือกำหนดกว้างเกินไป user ที่สมัครเองจะได้ role ที่ไม่ควรได้ หรือไม่มี role พื้นฐานเลย
💡 ตัวอย่างจากของจริง
บริษัท enterprise onboarding พนักงานใหม่ — ตั้ง default group เป็น
all-employeesให้ user ทุกคนที่สมัครผ่าน self-registration ภายในโดเมนบริษัทถูกจัดเข้า group นี้อัตโนมัติ พร้อม role พื้นฐานอย่างview-directoryโดยไม่ต้องให้ HR หรือ IT กดมือทีละคนทีม engineering ที่แบ่งเป็น subgroup — ใช้โครงสร้าง
engineering→backend,frontendเพื่อ map role เฉพาะทาง (เช่นdeploy-backend) ให้เฉพาะ subgroup ที่เกี่ยวข้อง เวลามีคนย้ายทีมก็แค่ย้าย membership ระหว่าง subgroup ไม่ต้องแก้ role assignment ใหม่ทั้งหมด