Bỏ qua, đến nội dung

Cài đặt và sử dụng — User Data Sync

Tổng quan

Plugin đồng bộ dữ liệu user từ nguồn bên ngoài vào Digiforce. Hỗ trợ hai chiều: pull (kéo từ nguồn) và push (nguồn đẩy vào). Mỗi lần đồng bộ được ghi nhận thành một task với trạng thái và thông tin chi tiết.

Bước 1: Kích hoạt plugin

Vào Settings → Plugin Manager, tìm plugin-user-data-sync và bật.

Hoặc kích hoạt qua dòng lệnh:

bash
yarn pm enable plugin-user-data-sync

Bước 2: Tạo nguồn đồng bộ (Sync Source)

Vào Settings → User Data Sync → Sources → nhấn Add Source:

TrườngMô tảBắt buộc
nameTên duy nhất của nguồn (ví dụ: ldap-production)
displayNameTên hiển thị (ví dụ: "LDAP Production")Không
sourceTypeLoại nguồn (liệt kê từ listSyncTypes)
enabledBật/tắt nguồn nàyKhông (mặc định: false)
optionsCấu hình kết nối (JSON — tùy loại nguồn)

Ví dụ cấu hình LDAP source

json
{
  "url": "ldap://ldap.example.com:389",
  "bindDN": "cn=admin,dc=example,dc=com",
  "bindPassword": "secret",
  "searchBase": "ou=users,dc=example,dc=com",
  "searchFilter": "(objectClass=person)",
  "fieldMapping": {
    "displayName": "nickname",
    "mail": "email",
    "telephoneNumber": "phone"
  }
}

Bước 3: Kiểm tra loại nguồn khả dụng

Gọi API để xem danh sách source types đã đăng ký:

typescript
const res = await agent.resource('userData').listSyncTypes();
// Trả về danh sách source types: ['ldap', 'http-api', ...]

Bước 4: Chạy đồng bộ

Pull — Kéo dữ liệu từ nguồn

typescript
await agent.resource('userData').pull({
  name: 'ldap-production',
});

Plugin sẽ:

  1. Tìm source config theo name
  2. Kết nối đến nguồn
  3. Kéo dữ liệu user
  4. Tạo/cập nhật records trong Digiforce
  5. Ghi nhận task với trạng thái và thời gian

Push — Nhận dữ liệu từ nguồn

typescript
await agent.resource('userData').push({
  values: {
    dataType: 'user',
    records: [
      { email: 'new@example.com', nickname: 'New User' },
    ],
  },
});

Push kiểm tra dataType có được resource nào hỗ trợ không. Nếu không hỗ trợ, trả lỗi 500.

Retry — Thử lại record thất bại

typescript
await agent.resource('userData').retry({
  sourceId: 1,
  id: 42,
});

Kiến trúc plugin

SyncSourceManager

Quản lý các loại nguồn (source types). Plugin khác có thể đăng ký source type mới:

typescript
const plugin = app.pm.get('user-data-sync') as PluginUserDataSyncServer;
plugin.sourceManager.registerType('custom-hr', {
  title: 'Custom HR System',
  // ... implementation
});

UserDataResourceManager

Quản lý các loại resource để xử lý dữ liệu đồng bộ (ví dụ: user, department). Mỗi resource khai báo accepts — danh sách dataType nó hỗ trợ.

Theo dõi đồng bộ

Collection userDataSyncTasks

Mỗi lần đồng bộ tạo 1 task:

FieldMô tả
batchMã batch duy nhất
sourceNguồn đồng bộ (belongsTo userDataSyncSources)
statusTrạng thái: pending, running, success, failed
messageThông báo lỗi (nếu có)
costThời gian xử lý (ms)

Logging

Plugin tạo logger riêng ghi vào thư mục user-data-sync/:

logs/user-data-sync/2024-01-15.log

Format JSON, dễ phân tích bằng ELK hoặc log viewer.

ACL — Phân quyền

ResourceQuyền (snippet)
userData:*Admin
userDataSyncSources:*Admin
userDataSyncTasks:*Admin

Chỉ admin có quyền quản lý đồng bộ user.

Lưu ý quan trọng

  • Đồng bộ thêm và cập nhật — mặc định không xóa user
  • Test với số lượng nhỏ trước khi đồng bộ toàn bộ
  • Kiểm tra field mapping đúng trước khi chạy production
  • Source type phải được đăng ký trước khi tạo source config
  • Log file riêng giúp debug đồng bộ mà không ảnh hưởng log chính