@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 +5 -1
- package/package.json +1 -1
- package/src/core/rbac/policy.js +12 -0
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
|
|
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
package/src/core/rbac/policy.js
CHANGED
|
@@ -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
|
+
|