PRD: Quản trị Nhân viên Vận hành & Phân quyền (Back Office)
| Module | Quản lý User | PRD ID | PRD-OPS-001 |
| Trạng thái | Sẵn sàng dev | FEAT | OPS · BANA-1435 |
| Epic | BANA-1336 | Plane | BANA-1738 |
| Ngày | 2026-06-26 | Phiên bản | v1.0 |
| Gói | @nx/identity | URD | OPS |
| Surface | BO · Vận hành | ||
| Phụ trách | Phát Nguyễn · Hải Cao | ||
Quản trị Nhân viên Vận hành là gì
Back Office là cổng quản trị nội bộ của Đội vận hành. Trong đó có một màn riêng để quản trị tài khoản nội bộ (system user) - tạo tài khoản, gán đúng vai trò cố định (SYSTEM) nội bộ, đặt lại mật khẩu, vô hiệu hóa tài khoản. Tài khoản nội bộ tách bạch hoàn toàn với nhân viên của merchant (EMP) và với khách hàng cuối (CUS), không lẫn vào nhau trên cùng một danh sách.
Back Office đã có sẵn khu Access Control và backend Quản lý Người dùng đã hỗ trợ trọn vòng đời user / role / permission từ trước. Đợt này lấp khoảng trống còn lại: đặt tên đúng cho surface đó là quản trị nhân viên vận hành, nối nó với thứ bậc vai trò cố định, và đặc tả quy tắc an toàn khi cấp quyền.
Ba vai trò cố định và trần ưu tiên
Ba vai trò cố định nội bộ, seed sẵn cùng thứ bậc priority giảm dần:
| Vai trò | Priority |
|---|---|
| Super Admin | 999 |
| Admin | 900 |
| Operator | 600 |
Các vai trò này định nghĩa tại ROLE - URD Phân quyền. Quy tắc trần ưu tiên của cả hệ thống áp cho cả tài khoản nội bộ: "muốn tạo, sửa, xóa, hay cấp phát một vai trò thì số ưu tiên của vai trò đó phải THẤP HƠN HẲN số ưu tiên cao nhất của chính mình. Ngang bằng cũng không được." Admin (900) không gán được vai trò Admin hay Super Admin cho ai, kể cả cho chính mình; chỉ Super Admin gán được tầng Admin.
Một tài khoản nội bộ, từ lúc tạo tới lúc dùng
Super Admin đầu tiên được khởi tạo ngoài luồng UI này. Từ đó, Super Admin tạo tài khoản cho Admin đầu tiên trong đội vận hành → Admin đó đăng nhập, mở màn quản trị nhân viên nội bộ, tạo tài khoản cho một Operator mới với thông tin đăng nhập và vai trò Operator → Operator đăng nhập ngay bằng username và mật khẩu vừa cấp. Một hôm, Admin thử gán vai trò Admin cho Operator đó để mở rộng quyền: picker vai trò không hiện Admin lẫn Super Admin, chỉ còn Operator để chọn - trần ưu tiên chặn ngay tại giao diện. Vài tuần sau, Operator quên mật khẩu; Admin dùng hành động "Reset mật khẩu" trên danh sách để cấp mật khẩu mới, không cần chạm cơ sở dữ liệu. Trước khi giao thêm việc, Admin mở "Xem quyền hiệu lực" của Operator đó để rà soát người này thực sự làm được gì.
Chỗ dễ sai nhất
Mật khẩu điền sẵn khi tạo tài khoản là một lỗ hổng, không phải tiện ích
Form tạo tài khoản nội bộ từng điền sẵn một mật khẩu mẫu cố định. Operator lưu nguyên giá trị đó thì nhiều tài khoản nội bộ dùng chung một mật khẩu dễ đoán - một lỗ hổng bảo mật âm thầm lan khắp đội vận hành.
Ô mật khẩu phải luôn để trống khi mở form tạo; người thao tác bắt buộc tự nhập mật khẩu mới cho từng tài khoản.