Команди та співпраця

DocPlatform розроблений для командної документації. Запрошуйте учасників, призначайте детальні ролі та відстежуйте кожну зміну за допомогою повного журналу аудиту.

Членство в робочому просторі

Кожен користувач належить до одного або кількох робочих просторів із конкретною роллю. Ролі визначають, які дії може виконувати користувач.

Запрошення учасників

Через веб-інтерфейс:

  1. Відкрийте Workspace SettingsMembers
  2. Натисніть Invite Member
  3. Введіть електронну адресу особи
  4. Оберіть роль
  5. Натисніть 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"
  }'

Видалення учасників

Адміністратори робочого простору можуть видаляти учасників через SettingsMembers → натисніть на користувача → 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). Якщо два користувачі одночасно редагують одну сторінку:

  1. Перше збереження проходить успішно
  2. Друге збереження запускає виявлення конфлікту (HTTP 409)
  3. Обидві версії зберігаються для ручного вирішення

Щоб уникнути конфліктів:

  • Використовуйте домовленості щодо відповідальності за сторінки (один автор на сторінку одночасно)
  • Індикатори присутності допомагають команді координувати, хто що редагує
  • Для команд із високим рівнем паралельної роботи розгляньте коротші інтервали синхронізації git

Журнал аудиту

Кожна мутація контенту логується з:

Поле Опис
Мітка часу Коли відбулася дія (UTC)
Користувач Хто виконав дію (email, ідентифікатор користувача)
Операція Що сталося: create, update, delete, publish, unpublish
Сторінка Яка сторінка зачеплена (ID, назва, шлях)
Джерело Звідки надійшла зміна: web_editor, git_sync, api
Хеш контенту SHA-256 нового контенту (для перевірки)

Перегляд журналу аудиту

Доступ до журналу аудиту через Workspace SettingsActivity.

Фільтруйте за:

  • Користувач — побачити всі зміни конкретного члена команди
  • Сторінка — побачити повну історію конкретної сторінки
  • Діапазон дат — звузити до часового вікна
  • Тип операції — фільтрувати за створеннями, оновленнями, видаленнями тощо

Типи дій аудиту

Поле 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, зливайте після ревʼю
  • Аудит перед публікацією — перегляньте журнал аудиту на предмет неочікуваних змін перед публікацією контенту