Adds RBAC matrix API/UI behind feature flags, agent×role toggles with audit, and extends Agentic Ops with streaming chat, Kimi LLM support, and UI updates.
160 lines
6.7 KiB
Markdown
160 lines
6.7 KiB
Markdown
# Spec 027-UI — Matriz de Acessos (Página Desk)
|
||
|
||
**Criado:** 2026-06-20
|
||
**Solicitado por:** Roger
|
||
**Status:** 🔄 Preview (read-only, feature flag)
|
||
**Sistema:** Desk VM122 · view `access-matrix`
|
||
**Relacionado:** Spec **027** (matriz) · Spec **004** (cadastro) · `platform_role_catalog.py`
|
||
|
||
---
|
||
|
||
## Objetivo
|
||
|
||
Página visual **estilo Odoo Groups + Permission Matrix** para consultar a matriz de funções Ligbox (VM112 / VM122 / VM123 / externas / agentes), **sem alterar** produção até Roger aprovar as telas.
|
||
|
||
---
|
||
|
||
## Princípios de entrega
|
||
|
||
| Regra | Implementação |
|
||
|-------|---------------|
|
||
| Zero impacto produção | `ACCESS_MATRIX_UI=0` (default) — menu oculto |
|
||
| Preview staging | `ACCESS_MATRIX_UI=1` no compose staging (`:8192`) |
|
||
| Só leitura v1 | Sem PATCH de roles/módulos na matriz |
|
||
| Fonte de verdade | `platform_role_catalog.py` + tabelas Spec 027 §3 |
|
||
| Quem vê | `super_admin` apenas (preview) |
|
||
| Não substituir | Página **Equipe Ligbox** (`admin-users`) mantida |
|
||
|
||
---
|
||
|
||
## Feature flag
|
||
|
||
```bash
|
||
# .env / docker-compose staging
|
||
ACCESS_MATRIX_UI=1 # staging preview
|
||
ACCESS_MATRIX_UI=0 # produção (default)
|
||
```
|
||
|
||
API:
|
||
|
||
```http
|
||
GET /api/v1/config/features
|
||
→ { "access_matrix_ui": true, "preview_mode": true }
|
||
|
||
GET /api/v1/rbac/matrix
|
||
→ catálogo completo (roles, módulos Desk, bindings, agentes, legenda)
|
||
```
|
||
|
||
---
|
||
|
||
## Referências UI (modelos a seguir)
|
||
|
||
### GitHub — RBAC admin / permission matrix
|
||
|
||
| Repo | O que reutilizar | URL |
|
||
|------|------------------|-----|
|
||
| **rbac-admin-platform** | Dashboard admin, tabela role×ação, audit, dark mode | https://github.com/bankotij/rbac-admin-platform |
|
||
| **RBAC-UI** (jagadish-pattanaik) | `PermissionMatrix.js`, sidebar roles, grouping | https://github.com/jagadish-pattanaik/RBAC-UI |
|
||
| **rbac-ui** (balamuruganpm) | User/role tables, collapsible sidebar | https://github.com/balamuruganpm/rbac-ui |
|
||
|
||
### shadcn/ui blocks (padrão visual da grelha)
|
||
|
||
| Block | O que reutilizar | URL |
|
||
|-------|------------------|-----|
|
||
| **Tables Permission Matrix** | Linhas agrupadas por módulo, colunas = roles, badges de nível | https://www.shadcn.io/blocks/tables-permission-matrix |
|
||
| **Dashboard Permission Matrix** | Grelha recurso×role, cores none/read/write/admin | https://www.shadcn.io/blocks/dashboard-permission-matrix |
|
||
|
||
### Odoo (modelo conceptual — não fork)
|
||
|
||
| Conceito Odoo | Equivalente Ligbox |
|
||
|---------------|-------------------|
|
||
| `res.users` + `groups_id` | `desk_users.role` + provisionamento VM123 |
|
||
| `res.groups` | `PLATFORM_ROLE_CATALOG[*].bindings` |
|
||
| `ir.model.access` | `permissions.py` + route guards |
|
||
| `ir.rule` (record rules) | mascaramento NOC, ticket assignee |
|
||
| Settings → Users → Groups UI | Página Matriz de Acessos |
|
||
|
||
Docs: https://www.odoo.com/documentation/16.0/developer/reference/backend/security.html
|
||
|
||
### Desk Ligbox (consistência visual)
|
||
|
||
- Paleta existente: `styles.css` (`--accent`, `--ok`, `--warn`, `--sidebar-bg`)
|
||
- Padrão módulo isolado: `agentic-ops.js` + CSS scoped (`#access-matrix-content`)
|
||
- Tabs admin: Equipe Ligbox | Matriz (quando flag ON)
|
||
|
||
---
|
||
|
||
## Wireframe (Preview v1)
|
||
|
||
```
|
||
┌─ PREVIEW — read-only · Spec 027 ─────────────────────────────────────┐
|
||
│ [ Equipe Ligbox ] [ Matriz de Acessos ● ] │
|
||
├──────────────┬───────────────────────────────────────────────────────┤
|
||
│ Funções │ [ VM122 Desk ] [ VM112 ] [ VM123 ] [ Externas ] [A0-A7]│
|
||
│ ───────── │ │
|
||
│ ▶ Ops │ Grelha módulo × função (✅ 🔒 ❌ ⚙️ 🔗) │
|
||
│ super_admin│ ou painel bindings por serviço (Odoo groups) │
|
||
│ ops_lead │ │
|
||
│ ▶ Comercial │ Ao seleccionar função → detalhe bindings: │
|
||
│ sales_admin│ vm123_odoo: sales_team.group_sale_manager │
|
||
│ … │ vm123_foss: ligbox-sales-admin │
|
||
└──────────────┴───────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## Fases
|
||
|
||
### Fase UI-A — Preview (esta entrega) ✅
|
||
|
||
- [x] Spec UI (este documento)
|
||
- [x] `GET /api/v1/rbac/matrix` read-only
|
||
- [x] `GET /api/v1/config/features`
|
||
- [x] `access-matrix.js` + CSS scoped
|
||
- [x] Flag staging ON, produção OFF
|
||
- [x] Tab **Software em escopo** (VM112 / VM123 / consolas externas — Spec 027 §2, §4, §5)
|
||
- [x] Cartão por função (resumo SW ≠ none)
|
||
- [ ] Roger aprova layout
|
||
|
||
### Fase UI-A2 — Melhorias sugeridas (backlog)
|
||
|
||
| Melhoria | Descrição | Prioridade |
|
||
|----------|-----------|------------|
|
||
| **Visão unificada** | Uma grelha Desk + SW (coluna «camada»: Desk / VM112 / VM123 / Externa) | Alta |
|
||
| **Deep-links activos** | Clicar 🔗 abre URL do serviço (Traefik, OpenPanel, etc.) se binding existir | Alta |
|
||
| **Diff vs. realidade** | Comparar matriz Spec 027 com `desk_users.role` + último login por SW | Média |
|
||
| **Export CSV/PDF** | Matriz completa para auditoria / onboarding | Média |
|
||
| **Filtro por produto** | Chips FOSSBilling, Odoo, OpenPanel, Carbonio… | Baixa |
|
||
| **Contas sistema** | Linha 🤖 `api_service` / agentes com credenciais mascaradas | Baixa |
|
||
| **Histórico** | Quem alterou role e quando (audit log Spec 004) | Futuro |
|
||
|
||
### Fase UI-B — Pós-aprovação
|
||
|
||
- Tab integrada em Administradores (sem flag)
|
||
- Export CSV/PDF da matriz
|
||
- Link «Ver matriz» no drawer Equipe
|
||
|
||
### Fase UI-C — Edição Agentics ✅ (staging)
|
||
|
||
- [x] Tabela SQLite `agent_role_bindings` + `agent_governance_caps`
|
||
- [x] `PATCH /api/v1/rbac/agent-bindings` (UI / focus / approve)
|
||
- [x] `PATCH /api/v1/rbac/agent-governance` (caps globais)
|
||
- [x] `GET /api/v1/rbac/agent-bindings/audit`
|
||
- [x] Enforcement API Agentics (`can_use_agentics_ui`, `can_chat_agent`, `can_trigger_runs`)
|
||
- [x] Toggles UI / OP / AP na matriz (flag `ACCESS_MATRIX_EDIT=1`)
|
||
- [x] Bindings A7→agentic_operator **locked** (Spec FR-027-007)
|
||
- [ ] Roger valida em staging → activar produção
|
||
|
||
---
|
||
|
||
## Critérios de aceite (Preview)
|
||
|
||
- [ ] Produção (`8091`): menu Matriz **invisível** com flag default
|
||
- [ ] Staging (`8192`): Roger vê Matriz como `super_admin`
|
||
- [ ] Página é 100% read-only (sem POST/PATCH)
|
||
- [ ] Dados batem com Spec 027 §3–6 e `platform_role_catalog.py`
|
||
- [ ] Equipe Ligbox / Mensagens / cadastro **inalterados**
|
||
|
||
---
|
||
|
||
*Roger — revisar em http://10.10.10.122:8192 após deploy staging.*
|