@oondemand/oon-core-back 0.7.0 → 0.7.1

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/README.md CHANGED
@@ -23,7 +23,11 @@ Compatibilidade temporária: `CENTRAL_ATIVACAO_BACKEND_URL` e `MEUS_APPS_BACKEND
23
23
 
24
24
  ## Catálogo público de perfis
25
25
 
26
- `GET /core/role-catalog` expõe o contrato mínimo e versionado dos perfis RBAC declarados pelo App. A resposta contém `appCode`, `enabled` e código, nome, descrição e indicador administrativo de cada papel; permissões internas não são publicadas. O endpoint é somente leitura, usa cache público de cinco minutos e não concede autorização.
26
+ Todo App com RBAC declarado expõe `GET /core/role-catalog`. O contrato `schemaVersion: 1` contém `appCode`, `enabled` e `roles[]` com `code`, `name`, `description` e `admin`. Desde o SDK 0.7.1, a extensão aditiva opcional `roles[].commercialPermissions` publica nomes explícitos de permissões funcionais permitidas pelo papel. Wildcards são expandidos somente pelas permissões declaradas em `rbac.permissions`; wildcard literal e namespaces `tenant`, `publications`, `homologation`, `production`, `apps`, `users` e `roles` são excluídos. Políticas internas e permissões técnicas não são publicadas.
27
+
28
+ O campo permanece opcional no schemaVersion 1: catálogos anteriores são conformes para descoberta e fluxos existentes. O novo aceite comercial inicial requer essa capacidade e deve falhar fechado com `APP_ROLE_CATALOG_UNAVAILABLE` quando ausente; não se infere autoridade do nome admin. Consumidores antigos devem tolerar campos adicionais. O runtime continua intersectando cada grant explícito com a política local atual.
29
+
30
+ O endpoint é somente leitura, usa cache público de cinco minutos e não concede autorização.
27
31
 
28
32
  ## Saúde operacional
29
33
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/oon-core-back",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",
@@ -127,6 +127,15 @@ function canAssignRole(actorPermissions, targetRole) {
127
127
  return target.every((permission) => actor.includes(permission));
128
128
  }
129
129
 
130
+ // Public, bounded capability names only; never publish wildcard or authority
131
+ // over identity, tenants or the Platform's delivery lifecycle.
132
+ function commercialRolePermissions(role, config = ctx.config) {
133
+ const declared = rolePermissions(role);
134
+ const candidates = declared.includes("*") ? policy(config).permissions : declared;
135
+ return unique(candidates).filter(permission => PERMISSION_PATTERN.test(permission)
136
+ && !/^(tenant|publications|homologation|production|apps|users|roles)\./.test(permission)).sort();
137
+ }
138
+
130
139
  function publicRoleCatalog(config = ctx.config) {
131
140
  const currentPolicy = policy(config);
132
141
  return {
@@ -138,6 +147,7 @@ function publicRoleCatalog(config = ctx.config) {
138
147
  name: role.name,
139
148
  description: String(role.description || ""),
140
149
  admin: role.admin === true || role.permissions?.includes("*") === true,
150
+ commercialPermissions: commercialRolePermissions(role, config),
141
151
  })),
142
152
  };
143
153
  }
@@ -180,5 +190,7 @@ module.exports = {
180
190
  matchingRoleForLegacyUser,
181
191
  canAssignRole,
182
192
  publicRoleCatalog,
193
+ commercialRolePermissions,
183
194
  publicPolicy,
184
195
  };
196
+