feat(vps): добавить permission vps:spaces:admin и docs Spaces
Каталог RBAC и секция Spaces в integrate-vps-tracker для multi-user пространств. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -81,11 +81,23 @@ pnpm --filter web dev # :5173
|
||||
| `vps:payments:read` | GET payments, balance-ledger | `/payments`, `/balance` |
|
||||
| `vps:payments:write` | мутации payments / ledger | формы платежей |
|
||||
| `vps:sync:write` | POST `/api/sync/*`, GET sync status | `/sync-journal`, кнопка sync |
|
||||
| `vps:settings:admin` | `/api/settings`, backup, audit, migrate | `/settings`, `/audit` |
|
||||
| `vps:spaces:admin` | управление всеми пространствами, grants из main | space switcher (все spaces), share/assign |
|
||||
| `vps:settings:admin` | `/api/settings`, backup, audit, migrate | `/settings`, `/audit`, `/spaces` |
|
||||
|
||||
## Пространства (spaces)
|
||||
|
||||
Данные VPS Tracker изолированы по `spaceId`. Заголовок **`X-Space-Id`**.
|
||||
|
||||
- **space-main** — основное (админский пул); существующие данные мигрируют сюда.
|
||||
- **personal** — автосоздание `space-user-{userId}` при первом входе.
|
||||
- **Share (ACL)** — `POST /api/spaces/:id/vps/:vpsId/share` — VPS остаётся в исходном space.
|
||||
- **Assign** — `POST /api/spaces/:id/vps/:vpsId/assign` — перенос; `providerAccountId` сбрасывается.
|
||||
- Участники: `GET/POST/PATCH/DELETE /api/spaces/:id/members` (userId из auth-portal).
|
||||
- Env: `VPS_MAIN_SPACE_OWNER_USER_ID` — owner для main при bootstrap.
|
||||
|
||||
Без app `vps` в JWT `apps` → **403** на весь `/api/*` (кроме health и CFDM integration).
|
||||
|
||||
`AUTH_REQUIRED=false` — auth выключен (удобно для локальной разработки без portal).
|
||||
`AUTH_REQUIRED=false` — auth выключен (удобно для локальной разработки без portal); данные в `space-main`.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
||||
@@ -80,6 +80,9 @@ export const PERMISSION_CATALOG: AppPermissionCatalog[] = [
|
||||
section('accounts', 'Аккаунты', 'Аккаунты провайдеров'),
|
||||
section('payments', 'Платежи', 'Платежи и баланс'),
|
||||
section('sync', 'Синхронизация', 'Запуск sync', ['write']),
|
||||
section('spaces', 'Пространства', 'Управление пространствами и выдачей доступа', [
|
||||
'admin',
|
||||
]),
|
||||
section('settings', 'Настройки', 'Настройки приложения', ['admin']),
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user