Приглашения и роли
Как пригласить участника, выдать роль и доступ к ресурсам, отозвать или отменить приглашение.
Приглашения и роли
В workspace можно пригласить других пользователей и выдать им роль и набор разрешений. Удобно для команды, агентского ведения клиентов или передачи доступа подрядчику.
Кого можно пригласить
Любого, у кого есть email. Если человек уже зарегистрирован в Framix — accept-ссылка ведёт на UI с кнопкой «Принять / Отклонить». Если нет — на signup, после регистрации membership создаётся автоматически.
Как пригласить
- Откройте
/account/workspaces/<id>→ блок «Участники». - Нажмите «Пригласить».
- Укажите email, выберите роль (
admin/member/viewer). - Дополнительно настройте
permissionsдляmember— какие ресурсы видит (agents, projects, CRM, statistics, commerce, files). Дляadminиviewerpermissions не настраиваются: admin видит всё, viewer — только read-only. - Отправьте приглашение.
В письме придёт ссылка вида https://framix.app/invite/<token>. Срок жизни приглашения по умолчанию — несколько дней; после expiresAt оно переходит в expired и принять его уже нельзя.
Роль owner через приглашение не выдаётся — для смены владельца есть отдельный flow «Передача ownership».
Что доступно по роли
| Роль | По умолчанию |
|---|---|
| owner | Полный доступ ко всем ресурсам и настройкам workspace, удаление, передача ownership, биллинг. |
| admin | Полный доступ ко всем ресурсам. Не может удалить workspace и не платит за него — биллинг лежит на owner'е. |
| member | Доступ только к ресурсам, перечисленным в permissions. Удалять не может — это hard-rule. |
| viewer | Read-only по всем ресурсам, к которым permissions дают чтение. Никаких изменений. |
Структура permissions (для member):
{
"agents": "all" | ["agt_id1", "agt_id2"],
"projects": "all" | ["prj_id1"],
"crm": true,
"stats": true,
"commerce": true,
"files": true
}
Отсутствие ключа = нет доступа. "all" — полный доступ к ресурсу типа. Массив id — точечный доступ.
Примеры:
- Контент-менеджер на один сайт:
{ projects: ["prj_blog"], files: true }. - SMM, ведущий чат-агента:
{ agents: ["agt_support"], crm: true }. - Бухгалтер клиента: роль
viewer+{ commerce: true, stats: true }— видит выручку и отчёты, ничего не правит.
Принятие и отказ
Адресат получает email со ссылкой. По клику видит:
- от кого приглашение, в какой workspace, на какую роль;
- кнопки «Принять» / «Отклонить».
После принятия workspace появляется в его списке в шапке и через /account/workspaces. После отклонения — приглашение помечается declined, повторно пригласить можно только новым приглашением.
Управление участниками
/account/workspaces/<id> → блок «Участники»:
| Действие | Кто может |
|---|---|
| Изменить роль | owner |
Изменить permissions member'у | owner |
| Удалить участника из workspace | owner |
| Покинуть workspace | сам участник (но owner — нет, нужно сначала передать ownership) |
Управление приглашениями
В том же блоке — список pending-приглашений. Owner может отменить ещё не принятое приглашение (cancelled статус) — ссылка перестанет работать.
После accept'а membership создаётся как обычная запись в workspace_member; в дальнейшем доступом управляйте через неё, а не через старое приглашение.
Биллинг и команда
- Списания идут с баланса owner'а workspace, а не с приглашённых участников.
- Action'ы агентов/AI, инициированные приглашённым участником через AI-чат редактора, списываются с баланса owner'а того workspace, в котором лежит сайт/агент.
- Личный AI-чат
/aiкаждого участника — это его персональный ассистент, списания идут с его собственного баланса, не с workspace.
Что хранится в инфраструктуре
| Таблица | Что внутри |
|---|---|
workspace_member | membership: workspaceId × userId × role × permissions |
workspace_invitation | pending/accepted/declined/cancelled/expired приглашения с токеном для accept-ссылки |