Команди та співпраця
DocPlatform розроблений для командної документації. Запрошуйте учасників, призначайте детальні ролі та відстежуйте кожну зміну за допомогою повного журналу аудиту.
Членство в робочому просторі
Кожен користувач належить до одного або кількох робочих просторів із конкретною роллю. Ролі визначають, які дії може виконувати користувач.
Запрошення учасників
Через веб-інтерфейс:
- Відкрийте Workspace Settings → Members
- Натисніть Invite Member
- Введіть електронну адресу особи
- Оберіть роль
- Натисніть Send
Якщо SMTP налаштовано, надсилається електронний лист із запрошенням з унікальним посиланням. Без SMTP посилання-запрошення відображається на екрані — скопіюйте та поділіться ним вручну.
Через API:
curl -X POST http://localhost:3000/api/v1/workspaces/{workspace-id}/invitations \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"role": "editor"
}'
Видалення учасників
Адміністратори робочого простору можуть видаляти учасників через Settings → Members → натисніть на користувача → Remove.
Видалення учасника негайно скасовує його доступ. Його минулі редагування та записи журналу аудиту зберігаються.
Зміна ролей
Натисніть на поточну роль учасника, щоб змінити її. Зміни ролей набувають чинності негайно — активні сесії оновлюються при наступному API-виклику.
Ролі
DocPlatform використовує 5-рівневу ієрархію ролей. Вищі ролі успадковують усі права нижчих ролей.
Super Admin
└── Admin
└── Editor
└── Commenter
└── Viewer
| Роль | Область | Можливості |
|---|---|---|
| Viewer | Робочий простір | Перегляд сторінок та пошук |
| Commenter | Робочий простір | Перегляд + залишення коментарів на сторінках |
| Editor | Робочий простір | Перегляд + коментування + редагування сторінок (створення/видалення налаштовується для кожного workspace) |
| Admin | Робочий простір | Editor + управління учасниками, ролями, налаштуваннями, git, темою |
| Super Admin | Платформа | Повний доступ до всіх робочих просторів + налаштування платформи, білінг, запрошення зовнішніх користувачів |
Роль за замовчуванням для нових учасників
Налаштуйте роль за замовчуванням, що призначається при прийнятті запрошення:
# .docplatform/config.yaml
permissions:
default_role: viewer
Доступ на рівні сторінки
Обмежте доступ до окремих сторінок для конкретних ролей за допомогою frontmatter:
---
title: Internal Runbook
access:
roles: ["sre-team", "admin"]
users: []
---
Сторінки з правилами access невидимі для користувачів без необхідної ролі — вони не з’являються в результатах пошуку, навігації або опублікованій документації. Правила доступу можуть лише обмежувати в межах ролі користувача, ніколи не надавати понад неї.
Присутність у реальному часі
Коли кілька користувачів активні в одному робочому просторі, веб-редактор показує, хто онлайн:
- Індикатори на бічній панелі — кольорові крапки поруч зі сторінками, які переглядаються або редагуються іншими користувачами
- Стек аватарів — аватари користувачів у заголовку сторінки, що показують, хто ще переглядає поточну сторінку
Присутність працює через WebSocket з’єднання та оновлюється в реальному часі.
Як працює присутність
| Параметр | Значення |
|---|---|
| Протокол | WebSocket (автентифікація через одноразовий ticket) |
| Інтервал heartbeat | Кожні 30 секунд |
| Таймаут виключення | 90 секунд без heartbeat |
| Події | presence-join (перше підключення), presence-leave (таймаут або відключення) |
| Буфер | 256 подій на робочий простір (запобігає backpressure) |
WebSocket з’єднання також доставляє події контенту в реальному часі:
| Подія | Коли |
|---|---|
page-created |
Створено нову сторінку (будь-яке джерело) |
page-updated |
Сторінку змінено (будь-яке джерело) |
page-deleted |
Сторінку видалено |
sync-status |
Зміна статусу синхронізації git (synced, ahead, behind, conflict) |
conflict-detected |
Виявлено конфлікт злиття git |
bulk-sync |
20+ файлів синхронізовано за одну операцію (одне сповіщення, а не для кожного файлу) |
Одночасне редагування
DocPlatform не підтримує спільне редагування в реальному часі (у стилі Google Docs). Якщо два користувачі одночасно редагують одну сторінку:
- Перше збереження проходить успішно
- Друге збереження запускає виявлення конфлікту (HTTP 409)
- Обидві версії зберігаються для ручного вирішення
Щоб уникнути конфліктів:
- Використовуйте домовленості щодо відповідальності за сторінки (один автор на сторінку одночасно)
- Індикатори присутності допомагають команді координувати, хто що редагує
- Для команд із високим рівнем паралельної роботи розгляньте коротші інтервали синхронізації git
Журнал аудиту
Кожна мутація контенту логується з:
| Поле | Опис |
|---|---|
| Мітка часу | Коли відбулася дія (UTC) |
| Користувач | Хто виконав дію (email, ідентифікатор користувача) |
| Операція | Що сталося: create, update, delete, publish, unpublish |
| Сторінка | Яка сторінка зачеплена (ID, назва, шлях) |
| Джерело | Звідки надійшла зміна: web_editor, git_sync, api |
| Хеш контенту | SHA-256 нового контенту (для перевірки) |
Перегляд журналу аудиту
Доступ до журналу аудиту через Workspace Settings → Activity.
Фільтруйте за:
- Користувач — побачити всі зміни конкретного члена команди
- Сторінка — побачити повну історію конкретної сторінки
- Діапазон дат — звузити до часового вікна
- Тип операції — фільтрувати за створеннями, оновленнями, видаленнями тощо
Типи дій аудиту
Поле action у журналі аудиту використовує крапкову нотацію для точної фільтрації:
| Дія | Опис |
|---|---|
page.create |
Створено нову сторінку |
page.update |
Контент або frontmatter сторінки змінено |
page.delete |
Сторінку видалено |
page.publish |
Сторінку опубліковано (зроблено публічною) |
page.unpublish |
Сторінку знято з публікації |
auth.login |
Користувач увійшов |
auth.register |
Зареєстровано нового користувача |
auth.password_reset |
Скидання пароля завершено |
workspace.create |
Створено новий робочий простір |
workspace.member_add |
Користувача додано до робочого простору |
workspace.member_remove |
Користувача видалено з робочого простору |
workspace.role_change |
Роль користувача змінено |
Зберігання
Журнали аудиту зберігаються в SQLite разом із вашими звичайними даними. Вони включаються в щоденні резервні копії. Термін зберігання за замовчуванням — 1 рік (налаштовується). Щотижнева задача очищення видаляє записи, старші за термін зберігання.
Email-сповіщення
З налаштованим SMTP DocPlatform надсилає транзакційні листи для:
| Подія | Отримувач | Вміст |
|---|---|---|
| Запрошення до робочого простору | Запрошений користувач | Посилання для приєднання + назва робочого простору |
| Скидання пароля | Користувач, що надіслав запит | Одноразовий токен скидання |
DocPlatform не надсилає сповіщень по електронній пошті про зміни контенту. Оновлення через WebSocket у реальному часі виконують цю функцію для активних користувачів, а журнал аудиту покриває історичний перегляд.
Налаштування SMTP
export SMTP_HOST=smtp.example.com
export SMTP_PORT=587
export SMTP_FROM=[email protected]
export SMTP_USERNAME=[email protected]
export SMTP_PASSWORD=your-app-password
Без SMTP посилання-запрошення та токени скидання пароля виводяться в stdout (логи сервера).
Поради для командних робочих процесів
- Один автор на сторінку — використовуйте індикатори присутності для уникнення конфліктів
- Редактори пишуть, адміністратори публікують — розділяйте обов’язки за допомогою ролей
- Використовуйте теги для відповідальності — позначайте сторінки
owner:janeдля визначення відповідальності - Git для робочих процесів ревʼю — відправляйте зміни в гілку, відкривайте PR, зливайте після ревʼю
- Аудит перед публікацією — перегляньте журнал аудиту на предмет неочікуваних змін перед публікацією контенту