Giao diện
Câu hỏi thường gặp (FAQ) — Departments
Sử dụng
Một user có thể thuộc nhiều phòng ban không?
Có. Quan hệ giữa departments và users là Many-to-Many (M2M) thông qua bảng trung gian departmentsUsers. Một user có thể thuộc bao nhiêu phòng ban tùy ý.
Phòng ban chính (Main Department) là gì?
Mỗi user có thể chỉ định một phòng ban chính qua trường mainDepartmentId trong bảng users. Phòng ban chính được sử dụng trong:
- Phân quyền ACL (ví dụ: user chỉ xem dữ liệu phòng ban chính)
- Hiển thị thông tin tổ chức mặc định
Quy tắc
Phòng ban chính phải nằm trong danh sách phòng ban của user. Nếu cố đặt phòng ban chính khác, hệ thống sẽ báo lỗi "Invalid main department".
Xóa phòng ban thì users có bị xóa không?
Không. Xóa phòng ban chỉ xóa:
- Bản ghi phòng ban trong bảng
departments - Liên kết trong bảng
departmentsUsers - Tất cả phòng ban con (cascade)
Users vẫn tồn tại trong hệ thống.
Có thể import cấu trúc phòng ban từ Excel không?
Hiện tại chưa có tính năng import trực tiếp từ UI. Bạn có thể:
- Sử dụng API
departments:createđể tạo hàng loạt qua script - Nếu plugin
user-data-syncđược bật, sử dụngDepartmentDataSyncResourceđể đồng bộ
Có giới hạn số cấp phòng ban không?
Không có giới hạn kỹ thuật. Plugin sử dụng adjacency-list tree — mỗi node trỏ đến parent. Tuy nhiên, khuyến nghị không quá 5-6 cấp để dễ quản lý và hiển thị.
Một phòng ban có thể có nhiều trưởng phòng (owner) không?
Có. Trường owners trong collection departments là quan hệ M2M — hỗ trợ nhiều owner. Mỗi owner được đánh dấu isOwner: true trong bảng departmentsUsers.
Phân quyền
Làm sao phân quyền theo phòng ban?
Plugin đăng ký middleware setDepartmentsInfo để đưa thông tin phòng ban vào context. Kết hợp với ACL:
- Tạo data scope trong ACL giới hạn theo phòng ban
- Ví dụ: user chỉ xem orders của phòng ban mình:
filter: { departmentId: { $in: currentUser.departments } } - Gán role theo phòng ban: phòng ban "Kế toán" tự động nhận role "Accountant"
Role gán cho phòng ban hoạt động thế nào?
Khi user được gán vào phòng ban có roles, user tự động nhận những roles đó. Mối quan hệ:
departments↔rolesqua bảngdepartmentsRoles- Middleware
setDepartmentsInfotổng hợp roles từ tất cả phòng ban của user
Trưởng phòng có quyền gì đặc biệt?
Mặc định, trưởng phòng (owner) không có quyền đặc biệt tự động. Bạn cần cấu hình thêm trong ACL nếu muốn:
- Tạo role riêng cho trưởng phòng
- Sử dụng
isOwnerflag trong data scope - Kết hợp với workflow để tự động phê duyệt
Lỗi thường gặp
Lỗi "Invalid main department"?
Phòng ban chính phải nằm trong danh sách phòng ban của user. Kiểm tra:
- User đã được gán vào phòng ban đó chưa
- Nếu thay đổi danh sách phòng ban, cập nhật
mainDepartmentIdtrước
Không kéo thả được để sắp xếp phòng ban?
- Kiểm tra quyền admin — chỉ admin mới có thể sắp xếp
- Đảm bảo trình duyệt hỗ trợ drag & drop
- Thử reload trang
Xóa phòng ban báo lỗi?
Middleware destroyDepartmentCheck kiểm tra trước khi xóa. Nếu phòng ban có phòng ban con, có thể cần xóa phòng ban con trước (tùy cấu hình cascade).
Thông tin phòng ban không cập nhật ngay?
Plugin sử dụng cache. Cache tự động xóa khi:
- Thay đổi thành viên phòng ban
- User đăng xuất
Nếu vẫn không cập nhật, thử đăng xuất và đăng nhập lại để xóa cache.
Vấn đề khác
Plugin có hỗ trợ Data Sync không?
Có, nếu plugin user-data-sync được bật. Plugin đăng ký DepartmentDataSyncResource cho phép đồng bộ cấu trúc phòng ban từ nguồn bên ngoài (LDAP, HR system, v.v.).
Cấu trúc phòng ban có ảnh hưởng đến hiệu năng không?
Với quy mô dưới 1000 phòng ban và 10.000 users, hiệu năng không đáng lo ngại. Plugin sử dụng:
- Cache cho thông tin phòng ban của user
- Trường
isLeafđể tối ưu hiển thị cây - Phân trang cho danh sách thành viên