Giao diện
Kiến trúc
Tổng quan
plugin-data-source-manager quản lý nhiều data source bên ngoài — từ kết nối, load schema, đến phân quyền riêng cho mỗi nguồn dữ liệu. Plugin sử dụng factory pattern để hỗ trợ nhiều loại connector và per-datasource ACL để kiểm soát truy cập.
DataSource Lifecycle
Luồng thêm data source mới
Trạng thái
Plugin theo dõi trạng thái mỗi data source:
| Status | Ý nghĩa |
|---|---|
loading | Đang kết nối và load schema |
loaded | Sẵn sàng sử dụng |
failed | Kết nối lỗi (xem dataSourceErrors) |
reloading | Đang reload (sau cập nhật cấu hình) |
Progress events được emit trong quá trình load, client có thể hiển thị thanh tiến trình.
Factory Pattern
Plugin sử dụng factory để tạo DataSource instance theo type:
typescript
// Plugin đăng ký driver
this.app.dataSourceManager.factory.register('postgres', PostgresDataSource);
this.app.dataSourceManager.factory.register('mysql', MySQLDataSource);
// Khi tạo data source mới
const ds = this.app.dataSourceManager.factory.create(type, options);Connector types có sẵn
| Plugin | Type key |
|---|---|
plugin-data-source-external-postgres | postgres |
plugin-data-source-external-mysql | mysql |
plugin-data-source-external-mssql | mssql |
plugin-data-source-external-oracle | oracle |
plugin-data-source-external-mariadb | mariadb |
plugin-data-source-rest-api | rest-api |
Per-DataSource ACL
Mỗi data source ngoài có hệ thống ACL riêng, hoàn toàn tách biệt với ACL của data source chính.
Cấu trúc phân quyền
loadIntoACL
Khi data source được load, plugin:
- Tạo ACL instance riêng cho data source.
- Đọc
dataSourcesRoles→ gán strategy. - Đọc
dataSourcesRolesResources→ gán resource permissions. - Đọc
dataSourcesRolesResourcesActions→ gán action permissions với scope.
mergeRole
Tương tự plugin-acl, per-DS ACL hỗ trợ mergeRole để kết hợp quyền từ nhiều role của user.
handleSyncMessage — Cluster Sync
Khi chạy nhiều instance, thay đổi trên instance A cần đồng bộ sang instance B:
Sync messages bao gồm:
- ACL sync (role/resource/action thay đổi).
- Load/unload collection/field.
- Data source enable/disable.
Hooks
| Hook | Thời điểm | Hành vi |
|---|---|---|
dataSources.beforeSave | Trước khi lưu | Validate options, test connection |
dataSources.afterSave | Sau khi lưu | Load data source vào app |
dataSourcesFields.beforeSave | Trước khi lưu field | Validate field config |
dataSourcesFields.afterSave | Sau khi lưu field | Reload collection |
loadDataSourceTablesIntoCollections
Middleware chạy khi data source load xong — đọc danh sách tables từ database ngoài và tạo dataSourcesCollections records tương ứng.