Перейти к содержанию

Role Model

Ролевая модель платформы AqStream.

Обзор

flowchart TB
    subgraph Platform["Уровень платформы"]
        Guest["👤 Гость"]
        User["👤 Пользователь"]
        PlatformAdmin["👑 Админ платформы"]
    end

    subgraph Organization["Уровень организации"]
        Owner["🏢 Владелец"]
        Moderator["🛡️ Модератор"]
    end

    subgraph Group["Уровень группы"]
        GroupMember["👥 Участник группы"]
    end

    subgraph Event["Уровень события"]
        PublicEvent["🎫 Публичное событие"]
        PrivateEvent["🔒 Приватное событие"]
    end

    Guest -->|"Регистрация"| User
    User -->|"Запрос + одобрение + создание"| Owner
    Owner -->|"Приглашение"| Moderator

    Owner & Moderator -->|"Создание группы + инвайт"| GroupMember
    User -->|"Инвайт в группу"| GroupMember

    Owner & Moderator -->|"Создание"| PublicEvent & PrivateEvent
    User -->|"Регистрация"| PublicEvent
    GroupMember -->|"Регистрация"| PrivateEvent

Уровень платформы

Роли, определяющие базовый доступ к платформе.

flowchart LR
    Guest["Гость"] -->|"Регистрация"| User["Пользователь"]
    User -->|"Запрос одобрен + создание организации"| Owner["Владелец"]

Матрица прав

Возможность Гость Пользователь Админ
Просмотр публичных событий
Создание аккаунта
Регистрация на события
Личный кабинет
История событий
Управление билетами
Запрос на создание организации
Настройки профиля
Настройки уведомлений
Одобрение запросов на организации
Управление пользователями
Управление организациями
Модерация событий
Системные настройки
Просмотр логов
Метрики платформы

Как создать организацию: 1. Пользователь отправляет запрос на создание организации 2. Админ платформы рассматривает запрос 3. При одобрении — пользователь создаёт организацию и становится её Владельцем

Уровень организации

Роли внутри организации. Пользователь может иметь разные роли в разных организациях.

flowchart LR
    Owner["Владелец"] -->|"Назначает"| Moderator["Модератор"]

Владелец (Owner)

Создатель организации с полным контролем.

  • Один владелец на организацию
  • Может передать владение другому пользователю
  • Единственный, кто может удалить организацию

Модератор

Управляет организацией и событиями.

  • Приглашает и удаляет членов (кроме владельца)
  • Создаёт и редактирует события
  • Проводит check-in
  • Доступ к аналитике

Матрица прав

Право Владелец Модератор
Удаление организации
Передача владения
Редактирование организации
Приглашение членов
Удаление членов ✓*
Назначение ролей
Создание групп
Удаление групп
Приглашение в группы
Создание событий
Редактирование событий
Отмена событий
Check-in
Просмотр регистраций
Просмотр аналитики
Экспорт данных

*Модератор не может удалить владельца

Группы

Группы позволяют ограничивать видимость событий внутри организации.

flowchart TB
    subgraph Org["Организация"]
        Owner["Владелец"]
        Mod["Модератор"]

        subgraph Groups["Группы"]
            G1["Saratov Team"]
            G2["Moscow Team"]
        end

        subgraph Events["События"]
            E1["Публичное событие"]
            E2["Событие для Saratov"]
            E3["Событие для Moscow"]
        end
    end

    Owner & Mod -->|"Создают"| G1 & G2
    Owner & Mod -->|"Создают"| E1 & E2 & E3

    G1 -.->|"Видит"| E2
    G2 -.->|"Видит"| E3

Зачем нужны группы

  • Приватные события для определённой аудитории
  • Региональные команды внутри организации
  • VIP-доступ к событиям
  • Корпоративные мероприятия для сотрудников

Участник группы

Пользователь, добавленный в группу по инвайту.

Возможность Доступ
Просмотр событий группы
Регистрация на события группы
Выход из группы

Особенности: - Один пользователь может состоять в нескольких группах - Группы принадлежат организации - Владелец и модераторы видят все события (включая групповые)

Приглашение в группу

  1. Владелец/модератор создаёт группу
  2. Генерируется уникальный инвайт-код
  3. Пользователь переходит по ссылке
  4. Становится участником группы

Видимость событий

Тип события Кто видит
Публичное Все пользователи
Групповое Участники группы + Владелец/Модератор

Уровень события

Контекстные роли в рамках конкретного события.

Участник события

Пользователь, зарегистрированный на событие.

Возможность Доступ
Просмотр своего билета
Отмена регистрации
Просмотр информации о событии
Список участников* По настройке события

*Видимость списка участников настраивается организатором (открытая/закрытая)

Жизненный цикл пользователя

stateDiagram-v2
    [*] --> Гость

    Гость --> Пользователь: Регистрация на платформе

    Пользователь --> Владелец: Запрос одобрен + создание организации
    Пользователь --> Участник: Регистрация на событие
    Пользователь --> УчастникГруппы: Инвайт в группу

    Владелец --> Пользователь: Удаление/выход из организации

    state "В организации" as InOrg {
        Владелец --> Модератор: Передача владения
    }

Назначение ролей

Приглашение в организацию

  1. Владелец или модератор отправляет приглашение через Telegram
  2. Приглашённый получает уведомление с ссылкой
  3. При принятии — становится модератором

Изменение роли

  • Только владелец может назначать/снимать роли
  • При передаче владения — старый владелец становится модератором

Изоляция данных

flowchart TB
    subgraph Tenant1["Организация A"]
        O1["Владелец A"]
        E1["События A"]
        R1["Регистрации A"]
    end

    subgraph Tenant2["Организация B"]
        O2["Владелец B"]
        E2["События B"]
        R2["Регистрации B"]
    end

    O1 --> E1 --> R1
    O2 --> E2 --> R2

    O1 -.->|"Нет доступа"| E2
    O2 -.->|"Нет доступа"| E1

Каждая организация — отдельный tenant: - Данные изолированы через Row Level Security - Пользователь видит только данные своих организаций - Админ платформы видит всё

Дальнейшее чтение