ผู้ใช้งาน CMS และการยืนยันตัวตน
ภาพรวม
Domain นี้เก็บ ผู้ใช้งานฝั่ง CMS (admin) ซึ่งเป็นคนละกลุ่มกับเพื่อน LINE ที่อยู่ใน เพื่อน LINE ขอบเขตครอบคลุมบัญชีผู้ใช้ ประวัติรหัสผ่าน โทเคนสำหรับลืมรหัสผ่าน และการจำกัดสิทธิ์เข้าถึงเป็นราย LINE OA
ผู้ใช้แบ่งเป็น 2 ชนิดตาม enum UserType คือ onemoby (ทีมแพลตฟอร์ม) และ customer (ผู้ใช้ฝั่งลูกค้า) การ login ของฝั่งลูกค้าจะค้นหาจากเงื่อนไข (email, type='customer', status='active') จึงมี unique index บังคับความไม่ซ้ำไว้
โครงสร้างข้อมูลหลัก
user (model User)
เก็บ email, firstname, lastname, avatar, type (UserType) และ status (CommonStatus) พร้อม FK organization_id ไปยัง organization.id และ role_id ไปยัง system_role.id (default 0) ใช้ soft delete ผ่าน deleted_date
จุดที่ควรทราบคือ unique index แบบ partial ชื่อ user_email_customer_uq ที่สร้างบน lower(email) และมีผลเฉพาะแถวที่เข้าเงื่อนไข type='customer', deleted_date IS NULL และ status ไม่เท่ากับ delete การออกแบบให้เป็น partial index ทำโดยตั้งใจ เพื่อให้ผู้ใช้ประเภท onemoby สามารถใช้อีเมลเดียวกับบัญชี customer ของตนเองได้
password_history
เก็บ hash ของรหัสผ่านย้อนหลัง (bcrypt) ต่อผู้ใช้ 1 คน ผ่าน user_id (FK ไปยัง user.id), password, created_date และ expired_date
รหัสผ่านปัจจุบันคือแถวล่าสุดที่ยังไม่หมดอายุ — ตาราง user ไม่มี คอลัมน์ password อยู่เลย
forgot_password
โทเคนสำหรับรีเซ็ตรหัสผ่าน ประกอบด้วย code (VARCHAR 50), user_id, expired_date, status และ deleted_date
user_line_oa
ตารางนี้สร้างผ่าน migration/manual SQL และไม่ปรากฏใน Prisma ใช้จำกัดว่าผู้ใช้แต่ละคนเห็น channel ใดได้บ้าง โดยมี unique constraint บน (user_id, line_oa_id)
กติกาคือ ถ้าผู้ใช้ ไม่มีแถวในตารางนี้เลย จะเห็นทุก OA ขององค์กร (รักษาความเข้ากันได้กับข้อมูลเดิม) แต่ถ้ามีแถวอยู่ จะเห็นเฉพาะ OA ที่ระบุไว้เท่านั้น
ไฟล์ที่เกี่ยวข้อง
prisma/schema.prisma:215— modelUserprisma/schema.prisma:464— modelPasswordHistoryprisma/schema.prisma:477— modelForgotPasswordprisma/migrations/20260727120000_add_user_line_oa/migration.sql— ตารางuser_line_oaprisma/migrations/20260727150000_user_email_customer_unique/migration.sql— unique index อีเมลฝั่งลูกค้าseed-data/05.user.sql— seed ทีม 1Moby ทั้งชนิดonemobyและcustomerseed-data/10.password_history.sql— seed รหัสผ่านเริ่มต้น (bcrypt hash หมดอายุปี 2099)
จุดเชื่อมต่อกับ Service อื่น
- cms-api-go — จัดการ login และ refresh token, ขั้นตอนลืมรหัสผ่านและรีเซ็ตรหัสผ่าน, งาน user management รวมถึงใช้
user_line_oaกรองรายการ channel ที่ผู้ใช้แต่ละคนมองเห็น user.idถูกอ้างอิงเป็นcreated_byและupdated_byในแทบทุกตารางของระบบ โดยไม่มี FK จริง เก็บเป็นค่าตัวเลขเท่านั้น- เชื่อมกับ บทบาทและสิทธิ์การใช้งานโมดูล ผ่าน
role_idและ องค์กรและแพ็กเกจการใช้งาน ผ่านorganization_id