Giao diện
Hướng dẫn cài đặt và sử dụng — Departments
Yêu cầu
| Thành phần | Yêu cầu |
|---|---|
| Server Digiforce | Phiên bản >= 1.0 |
| Plugin phụ thuộc | plugin-users, plugin-acl, plugin-error-handler |
Bước 1: Kích hoạt plugin
- Truy cập Settings → Plugin Manager
- Tìm
plugin-departments - Bật công tắc Enable
- Khởi động lại server nếu hệ thống yêu cầu
Khi cài đặt lần đầu, plugin tự động:
- Tạo bảng
departments,departmentsUsers,departmentsRoles - Thêm trường
departmentsvàmainDepartmentvào collectionusers - Bảo vệ các collection hệ thống (không cho phép xóa)
Bước 2: Tạo cấu trúc phòng ban
Vào Settings → Departments để bắt đầu xây dựng cơ cấu tổ chức.
Tạo phòng ban gốc
- Nhấn Add department
- Nhập tên phòng ban (ví dụ: "Ban Giám đốc")
- Lưu lại
Tạo phòng ban con
- Chọn phòng ban cha trong cây phòng ban
- Nhấn Add sub-department
- Nhập tên phòng ban con (ví dụ: "Phòng Kinh doanh")
Plugin sử dụng cấu trúc adjacency-list tree — mỗi phòng ban có parentId trỏ đến phòng ban cha. Không có giới hạn số cấp.
Sắp xếp phòng ban
Kéo thả phòng ban trong cây để thay đổi thứ tự hiển thị. Plugin hỗ trợ sortable — mỗi phòng ban có trường sort để duy trì thứ tự.
Bước 3: Gán nhân viên vào phòng ban
- Chọn phòng ban trong cây phòng ban
- Nhấn Add members
- Chọn users từ danh sách (hỗ trợ tìm kiếm theo tên, email, số điện thoại)
- Xác nhận thêm
Quy tắc gán
| Quy tắc | Mô tả |
|---|---|
| Nhiều phòng ban | Một user có thể thuộc nhiều phòng ban (quan hệ M2M) |
| Phòng ban chính | Mỗi user có một mainDepartment — phòng ban chính |
| Validation | Phòng ban chính phải nằm trong danh sách phòng ban của user |
Lưu ý
Khi đặt mainDepartmentId cho user, phòng ban đó phải nằm trong danh sách phòng ban của user. Nếu không, hệ thống sẽ báo lỗi "Invalid main department, it must be one of the user's departments".
Bước 4: Chỉ định trưởng phòng (Owner)
- Chọn phòng ban
- Trong danh sách thành viên, nhấn Set as owner cho user cần chỉ định
- Một phòng ban có thể có nhiều owner
Owners có thuộc tính isOwner: true trong bảng liên kết departmentsUsers. Trưởng phòng có thể được sử dụng trong phân quyền ACL để cấp quyền quản lý đặc biệt.
Bước 5: Gán Role cho phòng ban
Mỗi phòng ban có thể được liên kết với một hoặc nhiều Role (vai trò). Khi user được gán vào phòng ban, họ tự động nhận các role của phòng ban đó.
| Trường | Mô tả |
|---|---|
departments.roles | Quan hệ M2M qua bảng departmentsRoles |
departmentId | ID phòng ban |
roleName | Tên role |
Tìm kiếm tổng hợp (Aggregate Search)
Plugin cung cấp action aggregateSearch cho phép tìm kiếm đồng thời cả user và phòng ban:
- Tìm user theo:
username,displayname,phone,email - Tìm phòng ban theo:
title - Hỗ trợ phân trang qua
last(cursor) vàlimit
Kết hợp với ACL
Phòng ban có thể được sử dụng làm điều kiện phân quyền:
- Data scope: Giới hạn user chỉ xem dữ liệu thuộc phòng ban của mình
- Role assignment: Gán role tự động theo phòng ban
- Plugin đăng ký middleware
setDepartmentsInfochạy sauauthvà trướcsetCurrentRole— đưa thông tin phòng ban vào context cho ACL sử dụng
Cache
Plugin sử dụng cache để tối ưu hiệu năng truy vấn phòng ban:
- Cache key:
departments:{userId} - Cache tự động bị xóa khi:
- Thay đổi danh sách phòng ban của user (
departmentsUsers.afterSave,afterDestroy) - User đăng xuất (
beforeSignOut)
- Thay đổi danh sách phòng ban của user (
Lưu ý triển khai
- Xóa phòng ban sẽ cascade xóa tất cả phòng ban con (do
onDelete: CASCADE) - Xóa phòng ban không xóa users, chỉ xóa liên kết trong
departmentsUsers - Plugin kiểm tra trước khi xóa: nếu phòng ban có phòng ban con, cần xóa phòng ban con trước
- Trường
isLeaftự động cập nhật khi thêm/xóa phòng ban con — phục vụ hiển thị cây - Plugin hỗ trợ Data Sync qua
DepartmentDataSyncResource(nếu pluginuser-data-syncđược bật)