Media Library
Quản lý ảnh, upload, bản quyền và chèn vào bài viết.
Media Library
Media Library quản lý ảnh của tenant qua Supabase Storage. Ảnh được dùng trong editor Blogs và Chat.
Thư viện
/dashboard/media — grid, filter, pagination
Upload
Tạo session → PUT file → register
Bản quyền
Confirm rights trước khi approve/publish
Bạn tìm thấy gì ở đâu
| Trang | Đường dẫn | Mô tả |
|---|---|---|
| Media | /dashboard/media | Grid ảnh, filter, phân trang, xem chi tiết, xóa |
Upload ảnh
Tạo session: chọn file (check MIME whitelist + max size + magic bytes) →
createUploadSession trả uploadUrl.Tải lên:
PUT file tới signed URL.Register: gọi
registerUploaded để hệ thống ghi nhận file.Sử dụng: trong Blogs editor bấm MediaLibraryDialog → chọn ảnh → chèn vào bài bằng signed URL TTL 1h.
// Luồng tenant không cần code — mô tả để hiểu
// 1. createUploadSession({ filename, mimeType, byteSize })
// 2. PUT file to uploadUrl
// 3. registerUploaded({ mediaId })Đường dẫn Storage luôn là {org_id}/media/{media_id}/{filename} — không expose private path. Mọi truy cập đều qua signed URL TTL 1h, tự regenerate khi hết hạn.
Bản quyền ảnh (Media Rights)
- Trước khi Approve draft, hệ thống kiểm tra ảnh trong bài có
rightshợp lệ không quarightsForDraft - Nếu thiếu, UI chặn nút Approve và hiện banner — bạn cần
confirmRightsForDraft - Đây là gate quan trọng để tránh publish ảnh không có quyền
Quản lý
| Hành động | Mô tả |
|---|---|
list / listPaginated | Xem danh sách, có filter và pagination |
updateMetadata | Sửa tiêu đề/mô tả ảnh |
attachToDraft | Gắn ảnh vào draft |
delete | Xóa ảnh |
rightsForDraft / confirmRightsForDraft | Kiểm tra và xác nhận bản quyền |
Tất cả đều scope theo org_id — tenant chỉ thấy ảnh của mình.
Trong Chat & Blogs
- Chat: ảnh sinh bởi AI lưu ở
chat_image_assets, có thể regenerate hoặc remove khỏi draft - Blogs: ảnh trong draft có thể là upload thủ công hoặc AI sinh — đều phải qua media rights check
Lưu ý
- Signed URL hết hạn sau 1h — hệ thống tự regenerate khi bạn mở lại bài (stale-image recovery)
- Xóa ảnh trong Media không xóa ảnh đã publish trên website — chỉ xóa khỏi thư viện
- Bucket
tenant-medialà private, không public