S9 — สิ่งที่ต่างจากระบบเดิม (Changes vs Current)¶
เทียบอะไรกับอะไร
ปัจจุบัน = schema PORTAL @ PSDBPRDDB (.149) — 48 ตาราง (Phase 1, ใช้งานจริง) → เป้าหมาย = ขยายต่อ (+23 ตาราง / แก้ 1)
· ต่างจาก S8 ตรงที่ S9 เป็น extension ไม่ใช่ redesign → ตารางเดิมส่วนใหญ่ ใช้ต่อไม่แก้
· ดู: schema.sql · Data Dictionary · Implementation
ภาพรวม¶
- เพิ่ม 23 ตารางใหม่, แก้ 1 ตาราง (ALTER), ตารางเดิม ~30 ตาราง reuse ไม่แก้
- S9 กลายเป็น single authorization authority ของทุกระบบ (รวม S8) → sync ไป Keycloak client roles
- ThaiD: open item → พร้อมใช้ (ยืนยันแล้ว ไม่ใช่ความเสี่ยงค้าง)
🆕 เพิ่มใหม่ (23 ตาราง)¶
| กลุ่ม | ตาราง | ทำไม | อ้างอิง |
|---|---|---|---|
| Membership | UserSubsystemMembership |
ความสัมพันธ์ ผู้ใช้(ThaiD)↔ระบบย่อย (cross-system check) | REQ-WPT-002 |
| Card UI | SubsystemCard |
การ์ดระบบย่อยตามสมาชิก + breadcrumb | REQ-WPT-003 |
| Auth/SSO | AuthProvider, UserIdentity, SsoSession, SsoDownstreamGrant |
multi-identity + alt credential + dynamic downstream SSO | REQ-WPT-006 |
| Login security | SecurityPolicy, PasswordHistory, LoginAttempt, UserSecurityStatus |
lockout/aging/inactive/no-reuse + config back-office | REQ-WPT-007 |
| Authz routing | SubsystemOwner, PermissionApproval, Notification |
อนุมัติคำขอราย subsystem + แจ้งเตือนใน portal | REQ-WPT-005 |
| Integration | EndpointRegistry, ServiceCenterRequest, ServiceCenterRouting, PublishedQuery |
OpenAPI registry + Service Center routing + Query Builder | REQ-WPT-001 (CR-1/3/6) |
| Dashboard | AuditLog, UsageStatDaily |
audit trail + สถิติรายวันสำหรับกราฟ | REQ-WPT-008 |
| Survey | Survey, SurveyQuestion, SurveyResponse, SurveyAnswer |
แบบประเมินความพึงพอใจ (รวมของ S8 มาด้วย) | REQ-WPT-009 |
✏️ เปลี่ยน / ปรับ¶
| เดิม | ใหม่ | ความต่าง | อ้างอิง |
|---|---|---|---|
PermissionRequest |
+ คอลัมน์ AdOnlyAccess |
ช่อง "ขอสิทธิ์ AD เท่านั้น" (O-8) | REQ-WPT-005 |
UserRole (grant อยู่ใน DB อย่างเดียว) |
UserRole + sync Keycloak client roles |
ทุกระบบ enforce จาก JWT; portal เป็น authority กลาง | D8 / REQ-WPT-005 |
| ThaiD = ประเด็นเปิด | ThaiD พร้อมใช้ | สถานะ ไม่ใช่ schema — ปลด open item | SSO status |
🔁 ใช้ต่อ (reuse — ไม่แก้, ~30 ตาราง)¶
UserProfile (Pid=ThaiD, Id=Keycloak UUID), RLPDSystems, ModuleRoles, UserRole, Groups/SubGroups,
PermissionRequest + lookups, RequestedPermissions, PermissionRequest{History,Files,RunningNumber},
PetitionRequests + PetitionRequestDepartments/Files/History, PetitionChannel,
ApiKey, ApiTokens (Query Builder เดิม), OpenApiExecuteLog, EmailSentLog, SystemAccessLog,
EmailNotificationSettings, PasswordResetToken, TaskStatusMapping, master/geo lookups
❌ เอาออก¶
- ไม่มี — เป็น extension ล้วน ไม่ลบตารางเดิม
ผลกระทบข้ามระบบ (เพราะ authz รวมศูนย์)¶
- ทุกระบบย่อย (รวม S8) ต้องเป็น row ใน
RLPDSystems+ ลงทะเบียน role ที่ModuleRoles(seed) - การมอบสิทธิ์ทำที่ portal → sync Keycloak client roles → ทุกระบบอ่านจาก JWT (ดู Implementation REQ-WPT-005)
หมายเหตุการ rollout¶
- เป็น ALTER + create ตารางใหม่ (ไม่ใช่ migration ใหญ่) —
AdOnlyAccessมี DEFAULT ปลอดภัย - Seed:
AuthProvider,SecurityPolicy(ค่า O-7),SubsystemCard,SubsystemOwner - ตรวจ collation ของ string FK ให้ตรงกับ
PSDBPRDDB