03 account types
Четыре типа аккаунтов в OneWallet и их права доступа.
Типы аккаунтов¶
Тип аккаунта хранится в поле accountType таблицы users. Значения из модели (user.spy.yaml): consumer | merchant | agent | wallet.
| Тип | Кто | Доступные операции |
|---|---|---|
consumer |
Физическое лицо (кошелёк) | P2P-переводы, баланс, история, KYC, NFC-тег, mini-apps |
wallet |
Расширенный consumer (агентский пополняемый счёт) | Всё что consumer + пополнение счёта агентом (wallet_endpoint) |
merchant |
Юридическое лицо / торговая точка | Создание инвойсов, NFC-терминал, запрос settlement |
agent |
Агент / посредник | Топап потребителей, создание инвойсов |
Как работает guard¶
Каждый endpoint вызывает requireAccountType(session, [...]) из util/endpoint_guard.dart. Функция:
- Проверяет наличие активной сессии (иначе —
unauthenticated) - Находит
UserпоauthUserIdгдеisArchived = false - Сверяет
user.accountTypeсо списком разрешённых типов - При несовпадении выбрасывает
NotAuthorizedExceptionс кодомinsufficientAccess
flowchart TD
A[Запрос к endpoint] --> B{Сессия есть?}
B -- Нет --> E[NotAuthorizedException\nunauthenticated]
B -- Да --> C{User найден\nи не архивирован?}
C -- Нет --> E
C -- Да --> D{accountType\nв списке allowed?}
D -- Нет --> F[NotAuthorizedException\ninsufficientAccess]
D -- Да --> G[Возврат User\nвыполнение endpoint]
Некоторые endpoints допускают несколько типов: payment_endpoint разрешает ['consumer', 'wallet', 'agent'] для части методов.
Приложения по типу¶
| Приложение | appId | Разрешённые accountType |
|---|---|---|
| OneWallet кошелёк | wallet |
consumer, wallet |
| Closeloop | closeloop |
consumer |
| Merchant POS | merchant |
merchant, agent |
Разделение на уровне appId не проверяется сервером автоматически — гарантируется только через requireAccountType в каждом endpoint. Полная привязка токена к appId является запланированным улучшением [PLAN].
FCM роутинг¶
Уведомления направляются по appId, который приложение передаёт при регистрации FCM-токена:
| appId | Flutter-приложение | FCM-топик |
|---|---|---|
wallet |
onewallet_base_flutter |
wallet |
closeloop |
closeloop_app_flutter [PLAN] |
closeloop |
merchant |
merchant_app_flutter [PLAN] |
merchant |