# Wiki.js Client Portals - Инструкция по управлению

## Обзор

Wiki.js переконфигурирована под систему клиентских порталов:
- `/clients/` - корневая папка для клиентских проектов
- `/internal/` - внутренние документы (доступ только администраторам)
- Каждый клиент видит только свою папку
- Регистрация только через администратора

## Структура доступа

### Группы:
1. **Administrators** - полный доступ ко всему
2. **Guests** - только домашняя страница
3. **Users** - без доступа (не используется)
4. **Client: [Название]** - группы для каждого клиента

## Добавление нового клиента

### Вариант 1: Через Admin UI (Рекомендуется)

1. Войдите как администратор
2. Перейдите в Administration → Groups
3. Нажмите "New Group"
4. Заполните:
   - Name: `Client: Название Клиента`
   - Redirect on Login: `/clients/название-клиента`
5. Вкладка Permissions:
   - Выберите: `read:pages`, `read:assets`, `read:comments`, `write:comments`
6. Вкладка Page Rules → Add Rule:
   - Match: `START WITH`
   - Path: `clients/название-клиента`
   - Roles: `read:pages`, `read:assets`, `read:comments`, `write:comments`
7. Добавьте еще одно правило для домашней страницы:
   - Match: `EXACT`
   - Path: `home`
   - Roles: `read:pages`
8. Сохраните группу

### Вариант 2: Через SQL (Быстрый способ)

```bash
# Подключитесь к БД
docker exec -i postgres-main psql -U wikijs_user -d wikijs <<'EOSQL'

-- Замените CLIENT_NAME на название клиента (латиница, дефисы)
-- Замените CLIENT_DISPLAY_NAME на отображаемое название

INSERT INTO groups (name, permissions, "pageRules", "isSystem", "createdAt", "updatedAt", "redirectOnLogin")
VALUES (
  'Client: CLIENT_DISPLAY_NAME',
  '["read:pages","read:assets","read:comments","write:comments"]'::json,
  '[
    {
      "id":"client-CLIENT_NAME-access",
      "deny":false,
      "match":"START",
      "roles":["read:pages","read:assets","read:comments","write:comments"],
      "path":"clients/CLIENT_NAME",
      "locales":[]
    },
    {
      "id":"client-CLIENT_NAME-home",
      "deny":false,
      "match":"EXACT",
      "roles":["read:pages"],
      "path":"home",
      "locales":[]
    }
  ]'::json,
  false,
  NOW()::text,
  NOW()::text,
  '/clients/CLIENT_NAME'
);
EOSQL

# Перезапустите Wiki.js
cd /opt/03-business/wikijs && docker-compose restart
```

## Создание пользователя для клиента

### Через Admin UI:

1. Administration → Users → New User
2. Заполните:
   - Email
   - Name
   - Provider: Local или OAuth (Authentik)
3. Вкладка Groups:
   - Добавьте пользователя в группу `Client: [Название]`
4. Сохраните

### Через SQL:

```bash
docker exec -i postgres-main psql -U wikijs_user -d wikijs <<'EOSQL'

-- 1. Создайте пользователя
INSERT INTO users (email, name, "providerKey", "providerId", "isActive", "isVerified", "createdAt", "updatedAt")
VALUES (
  'client@example.com',
  'Client User Name',
  'local',
  '',
  true,
  true,
  NOW()::text,
  NOW()::text
);

-- 2. Получите ID пользователя и группы
SELECT u.id as user_id, g.id as group_id 
FROM users u, groups g 
WHERE u.email = 'client@example.com' 
  AND g.name = 'Client: CLIENT_DISPLAY_NAME';

-- 3. Добавьте пользователя в группу (замените USER_ID и GROUP_ID)
INSERT INTO "userGroups" ("userId", "groupId", "createdAt", "updatedAt")
VALUES (USER_ID, GROUP_ID, NOW()::text, NOW()::text);

EOSQL
```

## Создание структуры страниц для клиента

1. Войдите как администратор
2. Создайте новую страницу: `/clients/название-клиента`
3. Добавьте подстраницы:
   - `/clients/название-клиента/dashboard`
   - `/clients/название-клиента/documents`
   - `/clients/название-клиента/reports`

## Управление правами доступа

### Типы соответствия (Match):
- `START WITH` - все страницы, начинающиеся с пути
- `EXACT` - точное совпадение пути
- `END WITH` - все страницы, заканчивающиеся на путь
- `REGEX` - регулярное выражение
- `TAG` - по тегам страниц

### Роли (Roles):
- `read:pages` - просмотр страниц
- `read:assets` - просмотр файлов/изображений
- `read:comments` - просмотр комментариев
- `write:pages` - создание/редактирование страниц
- `write:assets` - загрузка файлов
- `write:comments` - написание комментариев
- `manage:pages` - управление страницами (перемещение, удаление)
- `delete:pages` - удаление страниц

## Полезные SQL запросы

### Просмотр всех групп и их правил:
```sql
SELECT id, name, "pageRules" FROM groups;
```

### Просмотр пользователей группы:
```sql
SELECT u.email, u.name, g.name as group_name
FROM users u
JOIN "userGroups" ug ON u.id = ug."userId"
JOIN groups g ON ug."groupId" = g.id
WHERE g.name LIKE 'Client:%';
```

### Удаление группы:
```sql
DELETE FROM groups WHERE name = 'Client: OLD_CLIENT_NAME';
```

## Бэкапы

Бэкап создан: `/tmp/wikijs_backup_20251103_172809.sql`

Создание нового бэкапа:
```bash
docker exec postgres-main pg_dump -U wikijs_user wikijs > /tmp/wikijs_backup_$(date +%Y%m%d_%H%M%S).sql
```

Восстановление:
```bash
docker exec -i postgres-main psql -U wikijs_user wikijs < /tmp/wikijs_backup_FILE.sql
cd /opt/03-business/wikijs && docker-compose restart
```

## Текущее состояние

- Все старые страницы перемещены в `/internal/`
- Самостоятельная регистрация отключена
- Создана тестовая группа: `Client: Example Client`
- Administrators имеют полный доступ к `/internal/` и `/clients/`

## Дополнительные ссылки

- Wiki.js Admin: https://info.ai-impress.com/a
- Документация Groups: https://docs.requarks.io/groups
- База данных: postgres-main:5432/wikijs

---

Создано: 2025-11-03
