@oondemand/create-central-oon 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/AUTH_ACTIVATION_RBAC.md +6 -0
- package/docs/FRONTEND_MANIFEST_REFERENCE.md +39 -0
- package/docs/RBAC_SECURITY.md +26 -0
- package/package.json +1 -1
- package/templates/_base/backend/package.json +1 -1
- package/templates/_base/frontend/package.json +1 -1
- package/templates/_base/package.json +1 -1
|
@@ -6,6 +6,12 @@ O backend verifica o token no escopo do App, resolve tenant e acesso, aplica a p
|
|
|
6
6
|
|
|
7
7
|
Ativação de plataforma cria a identidade operacional usada por integrações autorizadas. Rotas de login, launch exchange, ativação e primeiro acesso não estão disponíveis no runtime local.
|
|
8
8
|
|
|
9
|
+
## Catálogo público de perfis
|
|
10
|
+
|
|
11
|
+
Todo App com RBAC declarado expõe `GET /core/role-catalog`. O contrato `schemaVersion: 1` contém apenas `appCode`, `enabled` e `roles[]` com `code`, `name`, `description` e `admin`. Permissões internas não são expostas.
|
|
12
|
+
|
|
13
|
+
O catálogo serve para descoberta e seleção de perfis pelo Control Plane. Ele não concede acesso: o backend consumidor deve validar `schemaVersion` e `appCode`, consultar somente o Deployment resolvido pela plataforma, revalidar o perfil antes de persistir o grant e falhar fechado quando o catálogo estiver ausente ou inválido.
|
|
14
|
+
|
|
9
15
|
## Local
|
|
10
16
|
|
|
11
17
|
O principal técnico é `local:developer`, sem usuário/tenant/licença na plataforma. O papel inicial é `developer` quando declarado, seguido por admin ou primeiro papel. A troca de perfil aceita apenas o manifesto e atualiza a sessão local.
|
|
@@ -444,3 +444,42 @@ Tipos de aba:
|
|
|
444
444
|
- `customComponent`: chave de componente registrado.
|
|
445
445
|
|
|
446
446
|
`apiAction.endpoint` aceita `:id`, `:parentId`, `:fieldName` e `:parent.fieldName`. `refresh` aceita `self`, `parent`, `all` ou ids de abas.
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
## Opções remotas em campos de formulário
|
|
450
|
+
|
|
451
|
+
Campos `enum` podem carregar opções de um endpoint dependente do formulário atual ou do registro pai. O contrato funciona em formulários principais e em criação/edição de `relatedGrid`.
|
|
452
|
+
|
|
453
|
+
```ts
|
|
454
|
+
{
|
|
455
|
+
field: "roleCode",
|
|
456
|
+
label: "Perfil",
|
|
457
|
+
kind: "enum",
|
|
458
|
+
optionsEndpoint: "/control-plane/app-role-catalogs/:appId?tenantId=:parentId",
|
|
459
|
+
optionsResponsePath: "options",
|
|
460
|
+
optionsValueField: "value",
|
|
461
|
+
optionsLabelField: "label",
|
|
462
|
+
optionsDescriptionField: "description",
|
|
463
|
+
optionsEditablePath: "editable",
|
|
464
|
+
optionsDependsOn: ["appId", "tenantId"],
|
|
465
|
+
fallbackOptions: [{ value: "admin", label: "Administrador" }],
|
|
466
|
+
readonlyOnFallback: true,
|
|
467
|
+
optionsUnavailableMessage: "Catálogo indisponível; perfil admin aplicado."
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
| Campo | Uso |
|
|
472
|
+
| --- | --- |
|
|
473
|
+
| `optionsEndpoint` | Endpoint relativo. Aceita `:field`, `:parentId` e `:parent.field`; valores são codificados para URL. |
|
|
474
|
+
| `optionsResponsePath` | Caminho da lista na resposta. Sem valor, a própria resposta deve ser um array. |
|
|
475
|
+
| `optionsValueField` | Campo usado como valor da opção; padrão `value`. |
|
|
476
|
+
| `optionsLabelField` | Campo usado como rótulo; padrão `label`. |
|
|
477
|
+
| `optionsDescriptionField` | Campo opcional de descrição. |
|
|
478
|
+
| `optionsEditablePath` | Booleano remoto que permite ou bloqueia a edição. |
|
|
479
|
+
| `optionsDependsOn` | Campos que precisam estar preenchidos e cuja mudança invalida a seleção atual. |
|
|
480
|
+
| `fallbackOptions` | Opções seguras usadas quando o endpoint falha ou retorna lista vazia. |
|
|
481
|
+
| `readonlyOnFallback` | Bloqueia a seleção durante o fallback; padrão `true`. |
|
|
482
|
+
| `optionsUnavailableMessage` | Mensagem explicando o fallback ao usuário. |
|
|
483
|
+
| `readonly` | Bloqueia o campo em qualquer estado. |
|
|
484
|
+
|
|
485
|
+
O backend continua responsável por validar o valor selecionado. Opções remotas melhoram a experiência, mas não substituem autorização nem validação de domínio.
|
package/docs/RBAC_SECURITY.md
CHANGED
|
@@ -22,6 +22,32 @@ Use o RBAC do Core para:
|
|
|
22
22
|
- proteger rotas;
|
|
23
23
|
- permitir evolução de permissões sem reconstruir telas.
|
|
24
24
|
|
|
25
|
+
## Catálogo canônico de perfis
|
|
26
|
+
|
|
27
|
+
```http
|
|
28
|
+
GET /core/role-catalog
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Resposta:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"schemaVersion": 1,
|
|
36
|
+
"appCode": "central-compras",
|
|
37
|
+
"enabled": true,
|
|
38
|
+
"roles": [
|
|
39
|
+
{
|
|
40
|
+
"code": "viewer",
|
|
41
|
+
"name": "Consulta",
|
|
42
|
+
"description": "Somente leitura.",
|
|
43
|
+
"admin": false
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Use esse endpoint para montar seletores e validar grants por App. Não mantenha códigos de perfil paralelos no frontend ou no Control Plane. O consumidor deve validar versão e App, bloquear redirects e destinos de rede privados, revalidar o perfil no backend e tratar catálogo inválido como indisponível. O endpoint usa cache público de cinco minutos e nunca expõe a lista de permissões; a autorização efetiva continua no App.
|
|
50
|
+
|
|
25
51
|
## Checklist de segurança para Agents
|
|
26
52
|
|
|
27
53
|
Antes de concluir uma alteração, confirme:
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"sync:metadata": "oonCore-front sync:metadata"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@oondemand/oon-core-front": "^0.5.
|
|
14
|
+
"@oondemand/oon-core-front": "^0.5.2",
|
|
15
15
|
"@chakra-ui/react": "^3.13.0",
|
|
16
16
|
"@emotion/react": "^11.14.0",
|
|
17
17
|
"@tanstack/react-query": "^5.65.0",
|