Giai đoạn 1 · WS0 · Trên nền OpenGate · 06/7/2026

Tổ chức & phân quyền trên OpenGate

Phần lớn WS0 đã có sẵn ở Control Plane — multi-tenant (workspace), SSO, users, RBAC. Việc của ta là ánh xạ mô hình tổ chức/vai trò trường lái xe vào RBAC OpenGate và khai permissions[] trong từng module.

Tiết kiệm lớn: không còn tự xây nền tảng multi-tenant/SSO/RBAC (8–12 MM ở kế hoạch cũ). WS0 giờ chủ yếu là cấu hình + ánh xạ.
Nền tảng

OpenGate lo sẵn những gì

Hạng mục (kế hoạch cũ)OpenGate cung cấpGhi chú
Multi-tenantWorkspace — mỗi trung tâm 1 workspace, DB riêng (Level 2)Vĩnh An = 1 workspace; trường sau = workspace mới
Users + đăng nhậpControl Plane: User, MembershipKhông tự làm bảng user
SSOCP OAuth2 authorization-code, session toàn cục + workspaceĐăng nhập 1 lần, vào nhiều workspace
RBACCP: Role, RoleGroup, catalog Permission; module khai quyềnGán role cho user theo workspace
Store / cài moduleCP Store/Entitlements + runtime cài .ogappLicense thương mại per-workspace
Bảng tenant / user / role tự làm— không cần —Bỏ khỏi phạm vi tự xây
Quyền

Mô hình permission & quyền module hiện có

Permission key: <key>.<group>.<feature>.<action> — khai trong manifest.json. Backend chặn qua authorize(...), frontend ẩn/hiện qua hasPermission(...). Action: view, create, edit, delete, export, import, approve, assign, configure, report…

Module (key)FeaturePermission (rút gọn)
studentstudentstudent.main.student.{view,create,edit,delete}
teacherteacherteacher.main.teacher.{…}
vehiclevehiclevehicle.main.vehicle.{…}
coursecoursecourse.main.course.{…}
datdevice, logdat.main.device.{…}, dat.main.log.view
rfcardcardrfcard.main.card.{…}
cataloglicense, training-category, educational-level, teaching-subjectcatalog.main.<feature>.{…}

Module WS1 mới sẽ thêm feature/permission — vd student.main.hoso.approve, report.main.so-xd.export.

Vai trò

Vai trò nghiệp vụ → Role OpenGate

Mỗi vai trò = 1 Role trong CP bó các permission module. Một user gán nhiều role trong workspace (hợp trung tâm nhỏ kiêm nhiệm).

Vai tròRole đề xuấtBó permission chính
Chủ trung tâm / Giám đốcdirector*.view toàn bộ + *.approve báo cáo + BI
QL đào tạo / Giáo vụ trưởngtraining_mgrstudent/course/teacher/vehicle view/create/edit + course.*.approve + báo cáo Sở create
Nhân viên tuyển sinhadmissionstudent.main.student.{view,create,edit} (tiếp nhận) + CRM
Nhân viên giáo vụregistrarstudent.*, course.* create/edit + đối soát DAT view
Giáo viêninstructorstudent.main.student.view (phạm vi phụ trách) + lịch dạy
Kế toánaccountantcông nợ/hóa đơn/lương view/create/edit/approve
Nhân sự – Hành chínhhrteacher + nhân sự/chứng chỉ view/create/edit
Kỹ thuật / Xe – sânfleetvehicle.*, dat.main.device.*
Cán bộ sát hạch (nếu có sân)exam_opvận hành kỳ thi (module v2+)
Học viênkhông phải role CPtruy cập qua app học viên, chỉ dữ liệu của mình
Phòng ban

"Phòng ban" trong OpenGate — quyết định

Control Plane không có khái niệm Department (chỉ User/Role/RoleGroup). Ba lựa chọn:

1. Không mô hình phòng ban Khuyến nghị MVP

Chỉ dùng Role để phân quyền. Đơn giản nhất, đủ dùng.

2. RoleGroup như "phòng"

Gom role theo phòng để gán nhanh cho nhân viên.

3. Danh mục phòng nhẹ trong module

Chỉ khi cần luồng bàn giao hồ sơ giữa phòng (cột phong_phu_trach_id, phong_tu/den_id ở schema §2). Đặt danh mục phòng trong catalog hoặc student.

⚠️ Chờ danh sách phòng ban Vĩnh An (việc #3) để quyết. MVP đi phương án 1; thêm (3) khi thực sự cần bàn giao liên phòng.
Việc

Việc thực tế của WS0 (đã thu hẹp)

Cấu hình

  • Tạo workspace Vĩnh An (DB riêng)
  • Cài module: catalog, student, course, teacher, vehicle, dat, rfcard
  • Định nghĩa Role theo bảng trên
  • Tạo tài khoản nhân viên (việc #4) + gán role
  • Thêm permission cho feature WS1 (hồ sơ approve, báo cáo Sở export)

⚠ Cần verify / xác nhận

  • RBAC OpenGate có hỗ trợ data scope (phụ trách / chủ thể) không? → nếu không, lọc ở service module
  • runtime-core/base đã có audit log chung chưa?
  • Danh sách phòng ban Vĩnh An → quyết mô hình phòng
  • Có sân sát hạch không → role exam_op (v2+)