Bỏ qua, đến nội dung

Câu hỏi thường gặp — Credential

Sử dụng chung

Resource Type khác gì biến môi trường (Environment Variables)?

Tiêu chíResource TypeBiến môi trường
Mục đíchĐịnh nghĩa cấu trúc (schema) cho credentialLưu giá trị cấu hình
Quản lýQua giao diện, lưu trong databaseFile .env hoặc hệ điều hành
SchemaCó JSON Schema để validateKhông có schema
Phân quyềnQua ACLQua quyền truy cập file/server
Khi nào dùngCredential có cấu trúc phức tạp, cần form tự độngGiá trị đơn giản, cố định

Plugin khác truy cập resource type như thế nào?

Gọi API resource_type:list để lấy danh sách. API này được ACL allow cho mọi user đã đăng nhập (loggedIn), nên không cần quyền đặc biệt. Dữ liệu trả về bao gồm name, description, schemas — đủ để plugin tự sinh form cấu hình.

Trường schemas lưu gì?

Trường schemas chứa JSON Schema (dạng JSON object) mô tả cấu trúc dữ liệu cho loại credential. Ví dụ, resource type "SMTP" sẽ có schema với các property: host, port, username, password, encryption. Schema này được dùng để:

  • Tự động sinh form nhập liệu
  • Validate dữ liệu credential
  • Hiển thị mô tả/gợi ý cho từng trường

Có thể tạo resource type từ code không?

Có. Trong server plugin, bạn có thể dùng Repository API:

typescript
const repo = app.db.getRepository('resource_type');
await repo.create({
  values: {
    name: 'Custom API',
    description: 'Credential cho API tùy chỉnh',
    schemas: {
      type: 'object',
      properties: {
        endpoint: { type: 'string', title: 'Endpoint URL' },
        token: { type: 'string', title: 'Bearer Token' },
      },
      required: ['endpoint', 'token'],
    },
  },
});

Cấu hình

Resource type có hỗ trợ sắp xếp thứ tự không?

Có. Collection resource_typesortable: true, cho phép sắp xếp thứ tự hiển thị bằng drag & drop trên giao diện hoặc qua API sort field.

Schema có hỗ trợ validation phức tạp không?

Trường schemas lưu JSON tùy ý — bạn có thể sử dụng JSON Schema đầy đủ bao gồm:

  • required: Các trường bắt buộc
  • enum: Danh sách giá trị cho phép
  • default: Giá trị mặc định
  • minLength, maxLength: Giới hạn độ dài
  • pattern: Regular expression

Tuy nhiên, việc validate phụ thuộc vào plugin tiêu thụ (consumer) — plugin credential chỉ lưu trữ schema.

Ai có quyền tạo và sửa resource type?

  • Xem danh sách (list): Mọi user đã đăng nhập
  • Tạo/sửa/xóa: Phụ thuộc vào cấu hình ACL. Mặc định, chỉ admin hoặc role có quyền tương ứng trên collection resource_type

Lỗi thường gặp

Không tìm thấy resource type sau khi tạo

Nguyên nhân có thể:

  1. Plugin chưa được kích hoạt
  2. Bảng resource_type chưa được sync

Cách xử lý:

  1. Kiểm tra Plugin Manager — đảm bảo plugin-credential đã bật
  2. Khởi động lại ứng dụng để trigger db.sync()

Schema không hiển thị form đúng

Nguyên nhân: JSON Schema không đúng cú pháp hoặc thiếu type cho property.

Cách xử lý:

  1. Kiểm tra JSON có hợp lệ (dùng JSON validator)
  2. Mỗi property phải có type (string, number, boolean, object, array)
  3. Sử dụng title cho tên hiển thị thân thiện

Lỗi khi lưu schema với ký tự đặc biệt

Nguyên nhân: Trường schemas sử dụng kiểu jsonb — một số ký tự đặc biệt có thể gây lỗi parse.

Cách xử lý: Đảm bảo JSON được escape đúng. Tránh dùng ký tự \ không đúng cách trong giá trị string.