#standards#auth#security#pdpa#multi-tenant#frontend
Google Login, Multi-Tenant PDPA และหน้าเลือกโมดูล
เว็บ www.smlwork.com รองรับ Google OAuth, ปุ่มทดลองใช้ (ฐานข้อมูลตัวอย่าง smldemo), โหมด LAN และแยกสิทธิ์ตามฐานข้อมูลเพื่อ PDPA หลัง Login ผู้ใช้เลือกฐานข้อมูลแล้วเข้าหน้าเลือกโมดูล
กฎ/วิธีทำ
- หน้า Login
frontend/src/app/login/page.tsx: ปุ่มเข้าสู่ระบบด้วย Google, ปุ่มทดลองใช้งานทันที (Demo — ฐานข้อมูล smldemo), โหมด LAN (ซ่อนช่องรหัสผู้ใช้ไว้ใต้ปุ่มสลับ LAN) - Google OAuth (ตรวจกับโค้ดจริง
frontend/src/app/api/auth/google/route.ts):- เริ่มด้วย
?action=redirectสร้างstateแล้วเก็บใน cookie เฉพาะ route นี้ (oauth-state.ts) กัน login CSRF — callback ต้องisValidOAuthStateตรงกัน - redirect URI =
{origin}/api/auth/google - ดึง userinfo แล้ว รับเฉพาะอีเมลที่ยืนยันแล้ว (
email_verified === true) จากนั้นcompleteGoogleWorkspaceSessionและ redirect ไป/select-database - ค่า Client ID / Secret อ่านจาก env ชื่อ
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET(และNEXT_PUBLIC_GOOGLE_CLIENT_ID) — ดูค่าที่ env ของเซิร์ฟเวอร์ ห้ามบันทึกลงเอกสาร/โค้ด
- เริ่มด้วย
- PDPA Multi-Tenant Database Isolation (กติกาตาม KMS):
- ตารางควบคุม
sml_tenant_databasesและsml_tenant_members(ใน DB หลัก) เก็บฐานข้อมูลและสิทธิ์ตามอีเมลAdmin/Member Adminสร้างฐานข้อมูลใหม่ได้ (กันชื่อซ้ำ) และเพิ่มอีเมลกำหนดสิทธิ์ได้;Memberเห็นเฉพาะฐานข้อมูลที่ได้รับอนุญาต- Middleware
CheckTenantDBAccessบล็อกการเข้าถึงข้ามฐานข้อมูล - ห้ามแสดงรายชื่อฐานข้อมูลของลูกค้ารายอื่น ให้ผู้ใช้ที่ไม่อยู่ใน
sml_tenant_membersของฐานข้อมูลนั้นเด็ดขาด
- ตารางควบคุม
- Workspace Hub (
/homeและ/home?hub=1): หลังเลือกฐานข้อมูลจะเห็นกล่องเมนูระบบทั้งหมด คลิกกล่องเพื่อเข้าในหน้าเดิม หรือกด↗ เปิดแท็บใหม่บนการ์ด; ในหน้าทำงานกดสลับระบบ / ฐานข้อมูลมุมซ้ายบนเพื่อกลับ/home?hub=1โดยไม่ต้อง Login ใหม่ - ข้อกำหนดทั่วไป: identity ต้องมาจาก token ที่ตรวจแล้ว ไม่ไว้ใจ client (เช็กลิสต์ความปลอดภัย API: ตัวตน สิทธิ์ และช่องโหว่เว็บ (Secure API Checklist)); สิทธิ์จอแยกต่อฐานข้อมูล (
database_nameในsml_permissions_user/sml_permissions_group) ดู บทเรียนบั๊กสิทธิ์และการข้ามฐานข้อมูล (Auth Bypass, Cross-Tenant, Demo Read-Only, Screen Rights)
ไฟล์ที่ KMS อ้างแต่ไม่พบแล้ว / ไม่ตรงโค้ด (ไฟล์อ้างอิงไม่พบแล้ว)
backend/internal/interfaces/http/handlers/google_auth_handler.go— ไม่มีไฟล์/โฟลเดอร์นี้; Google OAuth ปัจจุบันอยู่ที่ Next.js route ข้างต้น- ค้น
sml_tenant_databases,sml_tenant_members,CheckTenantDBAccessในโค้ด backend/frontend ปัจจุบัน ไม่พบ มีแต่ในเอกสาร KMS —backend/internal/adapter/inbound/http/tenant/handler.goเป็นของ/admin/providers(ลงทะเบียน/รายการ Provider) ไม่ใช่ตารางสมาชิกฐานข้อมูล → ให้ถือว่ากติกา PDPA ด้านบนเป็นข้อกำหนดตามเอกสาร และตรวจโค้ดจริงก่อนอ้างว่าทำงานอยู่ frontend/shared/home/HomeHubScreen.tsxและfrontend/shared/layout/EnterpriseWorkbench.tsx— ไม่พบ; หน้า Home อยู่ที่frontend/src/app/(app)/home/page.tsx
ที่มา
docs/kms/KMS_SMLWORK_UX_REPORT_AUTH_MAP_STANDARDS.mdObjective ข้อ 6, Workflow §5, Config, LimitationAGENTS.mdกฎข้อ 20 (ความปลอดภัย & Data Integrity)
ดูเพิ่ม
สารบัญมาตรฐานและกฎเหล็กของ SML Ai Account (Standards Overview) · เช็กลิสต์ความปลอดภัย API: ตัวตน สิทธิ์ และช่องโหว่เว็บ (Secure API Checklist) · บทเรียนบั๊กสิทธิ์และการข้ามฐานข้อมูล (Auth Bypass, Cross-Tenant, Demo Read-Only, Screen Rights) · เฝ้าและตอบใบงาน IssueMate SMLAIACC (wait_for_issue.py, reply-batch, คำถาม PDF) · ภาพรวม Frontend ของ SML Ai Account (Frontend overview) · ภาพรวม Backend Go ของ SML Ai Account (Backend overview)