Skip to content

Business Specification (SPEC) - User Management (Quản lý người dùng)

1. Phân tích nghiệp vụ (Business Analysis)

Phân hệ Quản lý người dùng (User Management) là module nền tảng của hệ thống MES, đảm bảo tính bảo mật và kiểm soát truy cập cho tất cả các phân hệ khác (Production, Inventory, Quality,...).

Tính năng ảnh hưởng cần cập nhật: - Tính năng đăng nhập/đăng xuất (Authentication) và khôi phục mật khẩu. - Quản lý phân quyền (Authorization - Role-based access control) từ cấp bậc menu đến cấp bậc các nút bấm thao tác (Create/Read/Update/Delete). - Quản lý thông tin tài khoản (Profile, Đổi mật khẩu).

Tính năng không ảnh hưởng: - Các luồng tính toán sản xuất, xử lý nghiệp vụ máy móc không bị ảnh hưởng trực tiếp (User Management chỉ đóng vai trò là cửa ngõ cấp quyền truy cập vào các module đó).

2. Xác định dự án/mã nguồn xử lý chính

  • Mã nguồn xử lý chính: ./MES-Backend (Chiếm 90% logic).
  • Phân tích: Việc quản lý người dùng, mã hoá mật khẩu, sinh token (JWT hoặc Session), định nghĩa tập lệnh phân quyền (Roles & Permissions) hoàn toàn do tầng Backend đảm nhận. Front-end (UI/UX) chỉ đóng vai trò gọi cấu hình API của Backend để dựng/ẩn các page, giao diện tĩnh. Lớp cơ sở dữ liệu sẽ lưu trọn vẹn tại Database thông qua API của ./MES-Backend.

3. Các đối tượng tham gia (Actors)

  • Admin / System Manager: Có toàn quyền hệ thống (Superuser), quản lý tài khoản, thêm mới, sửa, xóa, khóa (deactivate) tài khoản của toàn bộ nhân viên, định nghĩa các cụm Phân quyền.
  • Production Manager, Warehouse Manager, QC Manager, Worker: Chỉ có quyền đăng nhập, thay đổi mật khẩu cá nhân, và truy cập nội dung nghiệp vụ được Admin gán tương ứng thông qua Role.

4. Các ca sử dụng chính (Use Cases)

  • UC1 - Đăng nhập (Login): Người dùng nhập Username/Password để lấy phiên đăng nhập (Token/Cookie).
  • UC2 - Đăng xuất (Logout): Hủy phiên đăng nhập hiện tại trên thiết bị.
  • UC3 - Đổi mật khẩu (Change Password): Người dùng tự thay đổi mật khẩu cá nhân.
  • UC4 - Quản lý tài khoản (CRUD Users - Dành cho Admin): Admin tạo tài khoản mới, cấp quyền (Role), vô hiệu hóa tài khoản khi nhân viên nghỉ việc.

5. Luồng đi (Biz Flow)

sequenceDiagram
    autonumber
    actor Admin
    actor User as Employee (Worker/QC)
    participant Auth as Auth Module (MES-Backend)
    participant DB as PostgreSQL DB

    Admin->>Auth: Yêu cầu tạo tài khoản (Username, Password, Role)
    Auth->>DB: Lưu thông tin (Password được băm)
    Auth-->>Admin: Tạo thành công

    User->>Auth: Nhập thông tin Đăng nhập
    Auth->>DB: Xác thực Username & Mật khẩu
    alt Hợp lệ
        Auth-->>User: Trả về Access Token & Phân quyền (Roles)
    else Không hợp lệ (Sai pass / Tài khoản khóa)
        Auth-->>User: Hiển thị thông báo Lỗi (Unauth)
    end

    User->>Auth: Gửi request truy cập chức năng bất kỳ (Gửi kèm Token)
    Auth->>DB: Kiểm tra Session / Access_Token
    Auth->>Auth: Kiểm tra Quyền thao tác (Role Permission)
    Auth-->>User: Cho phép thao tác hoặc Báo lỗi HTTP 403 Forbidden

6. Edge Cases (Các kịch bản ngoại lệ)

  1. Đăng nhập sai nhiều lần: Nếu đăng nhập thất bại quá 5 lần, tạm khóa (Lockout) tài khoản hoặc khóa IP trong 15 phút để chống tấn công Brute-force.
  2. Quên mật khẩu: Cần quy trình (Reset password) thông qua Admin cấp lại mật khẩu mới hoặc tính năng gửi email đặt lại mật khẩu.
  3. Session Timeout (Hết hạn phiên): Phiên đăng nhập tự động kết thúc sau một thời gian (ví dụ 8 tiếng) không hoạt động để đảm bảo an toàn nếu thiết bị tại xưởng để ngỏ.
  4. Vô hiệu hóa tài khoản đang Online: Khi Admin khóa tài khoản nhân viên sắp nghỉ việc (Deactivate), token định danh đang tồn tại phải bị vô hiệu hóa (Revoked) để đẩy user đó khỏi hệ thống ngay lập tức.

7. Tiêu chí chấp nhận (Acceptance Criteria)

  • AC1: Mật khẩu lưu trong hệ thống bắt buộc được mã hóa một chiều (Bcrypt, Argon2) - không được lưu Raw Text.
  • AC2: Không cho phép Admin tự xóa/Deactivate chính mình nếu đó là Admin duy nhất.
  • AC3: API Login phải xác minh tài khoản ở trạng thái is_active=True.
  • AC4: Hệ thống phải ghi lại nhật ký (System Audit Log) trong DB các lần User đăng nhập/đăng xuất (gồm Timestamp, User_id, IP Address).

8. BA Q&A (Các vấn đề cần khách hàng làm rõ trước khi code)

  1. SSO / Active Directory Integration: Nhà máy có đang sử dụng hệ thống quản lý danh bạ nào như Microsoft Active Directory (AD), Google Workspace hay Office 365 không? Hệ thống MES có cần tích hợp đăng nhập một lần (SSO - Single Sign-On) không, hay quản lý tài khoản/mật khẩu độc lập hoàn toàn?
  2. Chính sách mật khẩu (Password Policy): Khách hàng có yêu cầu bắt buộc mật khẩu phải đáp ứng độ khó cao (dài 8 ký tự, có ký tự đặc biệt, viết hoa..) và phải reset đổi mật khẩu định kỳ sau mỗi 90 ngày không?
  3. Phân quyền dữ liệu nâng cao (Data-level Role): Đối với các tài khoản Manager, họ có quyền xem dữ liệu của TẤT CẢ các phân xưởng/nhà máy không? Hay cần phân quyền chặt đến mức Manager Xưởng A không được xem dữ liệu của Xưởng B?
  4. Xác thực 2 yếu tố (2FA/MFA): Đối với các tài khoản cấp Admin (có quyền cao nhất), có cần bắt buộc xác minh mã Authenticator (OTP) đăng nhập từ thiết bị lạ không?