@oondemand/oon-core-back 0.5.0 → 0.5.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 +4 -0
- package/package.json +1 -1
- package/src/api/access.routes.js +6 -0
- package/src/core/rbac/policy.js +16 -0
package/README.md
CHANGED
|
@@ -21,6 +21,10 @@ O Core suporta `ecosystem.role` em `central.config.js`: `root` para a Central de
|
|
|
21
21
|
|
|
22
22
|
Compatibilidade temporária: `CENTRAL_ATIVACAO_BACKEND_URL` e `MEUS_APPS_BACKEND_URL` continuam aceitas como aliases da URL da API. Nunca aponte a URL da API para o próprio Core.
|
|
23
23
|
|
|
24
|
+
## Catálogo público de perfis
|
|
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.
|
|
27
|
+
|
|
24
28
|
## Saúde operacional
|
|
25
29
|
|
|
26
30
|
- `GET /health/ready`: retorna HTTP 200 somente quando o MongoDB está conectado; retorna 503 enquanto o runtime não estiver pronto.
|
package/package.json
CHANGED
package/src/api/access.routes.js
CHANGED
|
@@ -8,6 +8,7 @@ const { asyncHandler } = require("../core/utils/helpers");
|
|
|
8
8
|
const {
|
|
9
9
|
policy,
|
|
10
10
|
publicPolicy,
|
|
11
|
+
publicRoleCatalog,
|
|
11
12
|
roleByCode,
|
|
12
13
|
canAssignRole,
|
|
13
14
|
} = require("../core/rbac/policy");
|
|
@@ -90,6 +91,11 @@ function assertAssignable(actor, roleCode) {
|
|
|
90
91
|
return role;
|
|
91
92
|
}
|
|
92
93
|
|
|
94
|
+
router.get("/role-catalog", (_req, res) => {
|
|
95
|
+
res.set("Cache-Control", "public, max-age=300");
|
|
96
|
+
res.json(publicRoleCatalog());
|
|
97
|
+
});
|
|
98
|
+
|
|
93
99
|
router.get("/rbac", (_req, res) => {
|
|
94
100
|
res.json(publicPolicy());
|
|
95
101
|
});
|
package/src/core/rbac/policy.js
CHANGED
|
@@ -127,6 +127,21 @@ function canAssignRole(actorPermissions, targetRole) {
|
|
|
127
127
|
return target.every((permission) => actor.includes(permission));
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
function publicRoleCatalog(config = ctx.config) {
|
|
131
|
+
const currentPolicy = policy(config);
|
|
132
|
+
return {
|
|
133
|
+
schemaVersion: 1,
|
|
134
|
+
appCode: String(config.appCode || config.slug || "central"),
|
|
135
|
+
enabled: currentPolicy.enabled,
|
|
136
|
+
roles: currentPolicy.roles.map((role) => ({
|
|
137
|
+
code: role.code,
|
|
138
|
+
name: role.name,
|
|
139
|
+
description: String(role.description || ""),
|
|
140
|
+
admin: role.admin === true || role.permissions?.includes("*") === true,
|
|
141
|
+
})),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
130
145
|
function publicPolicy(config = ctx.config) {
|
|
131
146
|
const currentPolicy = policy(config);
|
|
132
147
|
return {
|
|
@@ -164,5 +179,6 @@ module.exports = {
|
|
|
164
179
|
legacyRoleCandidates,
|
|
165
180
|
matchingRoleForLegacyUser,
|
|
166
181
|
canAssignRole,
|
|
182
|
+
publicRoleCatalog,
|
|
167
183
|
publicPolicy,
|
|
168
184
|
};
|