@mybuildex/pkg 0.6.1 → 0.8.0
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 +35 -0
- package/dist/acl/allows.d.ts +3 -0
- package/dist/acl/allows.js +53 -0
- package/dist/acl/allows.js.map +1 -0
- package/dist/acl/check.d.ts +32 -0
- package/dist/acl/check.js +114 -0
- package/dist/acl/check.js.map +1 -0
- package/dist/acl/map.generated.d.ts +1 -0
- package/dist/acl/map.generated.js +2367 -0
- package/dist/acl/map.generated.js.map +1 -0
- package/dist/acl/plugin.d.ts +55 -0
- package/dist/acl/plugin.js +261 -0
- package/dist/acl/plugin.js.map +1 -0
- package/dist/acl/roles.d.ts +23 -0
- package/dist/acl/roles.js +71 -0
- package/dist/acl/roles.js.map +1 -0
- package/dist/audit/audit.d.ts +165 -0
- package/dist/audit/audit.js +595 -0
- package/dist/audit/audit.js.map +1 -0
- package/dist/audit/serialize.d.ts +20 -0
- package/dist/audit/serialize.js +94 -0
- package/dist/audit/serialize.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +68 -1
- package/dist/index.js.map +1 -1
- package/dist/prisma/multitenant.d.ts +6 -0
- package/dist/prisma/multitenant.js +6 -2
- package/dist/prisma/multitenant.js.map +1 -1
- package/dist/redis/client.d.ts +18 -0
- package/dist/redis/client.js +73 -0
- package/dist/redis/client.js.map +1 -0
- package/dist/tenant/auth.d.ts +4 -2
- package/dist/tenant/auth.js +29 -2
- package/dist/tenant/auth.js.map +1 -1
- package/dist/tenant/permissions.d.ts +57 -0
- package/dist/tenant/permissions.js +187 -0
- package/dist/tenant/permissions.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Resolver de permissões por papel (is_full / is_teacher / is_student),
|
|
3
|
+
// fonte única para atendimento e pedagogico, que tinham cópias idênticas do
|
|
4
|
+
// hook `onTenantResolved` com um defeito comum: começavam com
|
|
5
|
+
// `is_full = true` e mantinham isso quando o usuário não existia na escola,
|
|
6
|
+
// quando a lista vinha vazia ou quando a consulta falhava (fail-open, erro
|
|
7
|
+
// só no console).
|
|
8
|
+
//
|
|
9
|
+
// Regra:
|
|
10
|
+
// - sem id_school: não mexe no request (igual ao legado);
|
|
11
|
+
// - tudo começa false; sem user_id ou lista vazia continua tudo false;
|
|
12
|
+
// - is_full = a lista tem a permissão `full` — e SÓ isso. Antes qualquer
|
|
13
|
+
// perfil sem teacher/student virava is_full (inclusive responsável e
|
|
14
|
+
// aluno com o identificador `aluno`) e via tudo nos services;
|
|
15
|
+
// - is_teacher = teacher|professor; is_student = student|aluno;
|
|
16
|
+
// is_responsible = responsible|responsavel (nomes en ou pt, como o front);
|
|
17
|
+
// - erro em qualquer etapa: tudo false, permissions=[],
|
|
18
|
+
// permissions_error=true e log.
|
|
19
|
+
//
|
|
20
|
+
// Cache Redis `perms:<idSchool>:v<versão>:<uid>` (TTL 3600s), best-effort.
|
|
21
|
+
// A versão vem de `perms_ver:<idSchool>`: o v1_acls invalida a escola
|
|
22
|
+
// inteira com um INCR (invalidatePermissionsCache) — atômico e O(1), sem o
|
|
23
|
+
// `KEYS perms:<id>:*` que varria o Redis todo. Chaves de versões antigas
|
|
24
|
+
// morrem pelo TTL.
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.defaultPermissionsQuery = defaultPermissionsQuery;
|
|
27
|
+
exports.createPermissionsResolver = createPermissionsResolver;
|
|
28
|
+
exports.permissionsVersionKey = permissionsVersionKey;
|
|
29
|
+
exports.permissionsCacheKey = permissionsCacheKey;
|
|
30
|
+
exports.invalidatePermissionsCache = invalidatePermissionsCache;
|
|
31
|
+
const roles_1 = require("../acl/roles");
|
|
32
|
+
const SCHEMA_RE = /^[A-Za-z0-9_]+$/;
|
|
33
|
+
/** A mesma consulta que as APIs usavam, com o uid como parâmetro. */
|
|
34
|
+
async function defaultPermissionsQuery(prisma, uid) {
|
|
35
|
+
const schema = String(prisma?.$schema ?? "");
|
|
36
|
+
if (!SCHEMA_RE.test(schema))
|
|
37
|
+
throw new Error(`schema inválido: ${schema}`);
|
|
38
|
+
const db = "`" + schema + "`";
|
|
39
|
+
const sql = `select distinct identifier
|
|
40
|
+
from ${db}.permissions
|
|
41
|
+
where id in (select id_permission from ${db}.rules_permissions
|
|
42
|
+
where id_rule in (select id_rule from ${db}.policies_rules
|
|
43
|
+
where id_policie in (select id_policie from ${db}.profiles_policies
|
|
44
|
+
where id_profile in (select id_profile from ${db}.users_profiles
|
|
45
|
+
where id_user in (select id from ${db}.users where firebase_id = ?)))))`;
|
|
46
|
+
const rows = await prisma.$queryRawUnsafe(sql, uid);
|
|
47
|
+
return (rows ?? []).map((r) => String(r.identifier));
|
|
48
|
+
}
|
|
49
|
+
function createPermissionsResolver(options = {}) {
|
|
50
|
+
const ttl = options.cacheTtlSeconds ?? 3600;
|
|
51
|
+
const asList = (v, fallback) => v === undefined ? [...fallback] : Array.isArray(v) ? v : [v];
|
|
52
|
+
const teacher = asList(options.roles?.teacher, roles_1.TEACHER_ACLS);
|
|
53
|
+
const student = asList(options.roles?.student, roles_1.STUDENT_ACLS);
|
|
54
|
+
const responsible = asList(options.roles?.responsible, roles_1.RESPONSIBLE_ACLS);
|
|
55
|
+
const query = options.query ?? defaultPermissionsQuery;
|
|
56
|
+
const log = options.logger ?? ((m, e) => console.error(m, e));
|
|
57
|
+
return async function resolvePermissions(req, idSchool) {
|
|
58
|
+
if (!idSchool)
|
|
59
|
+
return;
|
|
60
|
+
req.is_full = false;
|
|
61
|
+
req.is_teacher = false;
|
|
62
|
+
req.is_student = false;
|
|
63
|
+
req.is_responsible = false;
|
|
64
|
+
req.permissions = [];
|
|
65
|
+
req.permissions_error = false;
|
|
66
|
+
const uid = req.user_id;
|
|
67
|
+
if (!uid)
|
|
68
|
+
return;
|
|
69
|
+
// serviço interno (auth internalAuth): não é usuário da escola — não consulta
|
|
70
|
+
if (req.internal === true)
|
|
71
|
+
return;
|
|
72
|
+
let cacheKey = null;
|
|
73
|
+
try {
|
|
74
|
+
let permissions = null;
|
|
75
|
+
if (options.redis) {
|
|
76
|
+
try {
|
|
77
|
+
const version = await readPermissionsVersion(options.redis, idSchool);
|
|
78
|
+
cacheKey = permissionsCacheKey(idSchool, version, uid);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// sem a versão não dá para saber se o cache vale: segue sem cache
|
|
82
|
+
log("permissions: redis get da versão falhou, consultando o banco", e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (options.redis && cacheKey) {
|
|
86
|
+
try {
|
|
87
|
+
const cached = await options.redis.get(cacheKey);
|
|
88
|
+
if (cached) {
|
|
89
|
+
const parsed = JSON.parse(cached);
|
|
90
|
+
if (Array.isArray(parsed))
|
|
91
|
+
permissions = parsed.map(String);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
log("permissions: redis get falhou, consultando o banco", e);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (!permissions) {
|
|
99
|
+
permissions = await query(req.prisma, uid);
|
|
100
|
+
if (options.redis && cacheKey) {
|
|
101
|
+
try {
|
|
102
|
+
await options.redis.setEx(cacheKey, ttl, JSON.stringify(permissions));
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
log("permissions: redis setEx falhou", e);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
req.permissions = permissions;
|
|
110
|
+
if (permissions.length === 0)
|
|
111
|
+
return;
|
|
112
|
+
req.is_full = permissions.includes("full");
|
|
113
|
+
req.is_teacher = teacher.some(r => permissions.includes(r));
|
|
114
|
+
req.is_student = student.some(r => permissions.includes(r));
|
|
115
|
+
req.is_responsible = responsible.some(r => permissions.includes(r));
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
log(`permissions: falha ao resolver permissões de ${uid} na escola ${idSchool}`, e);
|
|
119
|
+
req.is_full = false;
|
|
120
|
+
req.is_teacher = false;
|
|
121
|
+
req.is_student = false;
|
|
122
|
+
req.is_responsible = false;
|
|
123
|
+
req.permissions = [];
|
|
124
|
+
req.permissions_error = true;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// --------------------------------------------------- versão do cache ----
|
|
129
|
+
const SCHOOL_RE = /^\d+$/;
|
|
130
|
+
/** Chave da versão do cache de permissões de uma escola. */
|
|
131
|
+
function permissionsVersionKey(idSchool) {
|
|
132
|
+
return `perms_ver:${idSchool}`;
|
|
133
|
+
}
|
|
134
|
+
/** Chave do cache de permissões de um usuário numa versão. */
|
|
135
|
+
function permissionsCacheKey(idSchool, version, uid) {
|
|
136
|
+
return `perms:${idSchool}:v${version}:${uid}`;
|
|
137
|
+
}
|
|
138
|
+
async function readPermissionsVersion(redis, idSchool) {
|
|
139
|
+
const raw = await redis.get(permissionsVersionKey(idSchool));
|
|
140
|
+
// só inteiro: qualquer lixo na chave vira versão 0 (nunca entra na chave de cache)
|
|
141
|
+
return raw && /^\d+$/.test(raw) ? raw : "0";
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Invalida o cache de permissões de UMA escola: INCR em `perms_ver:<id>`.
|
|
145
|
+
* Chamar depois de qualquer escrita em permissões, regras, políticas,
|
|
146
|
+
* perfis ou vínculo usuário↔perfil (v1_acls). Nunca lança.
|
|
147
|
+
*/
|
|
148
|
+
async function invalidatePermissionsCache(redis, idSchool, options = {}) {
|
|
149
|
+
const log = options.logger ?? ((m, e) => console.error(m, e));
|
|
150
|
+
const result = { version: null, legacyDeleted: 0 };
|
|
151
|
+
const id = idSchool === null || idSchool === undefined ? "" : String(idSchool);
|
|
152
|
+
if (!redis)
|
|
153
|
+
return result;
|
|
154
|
+
if (!SCHOOL_RE.test(id) || Number(id) <= 0) {
|
|
155
|
+
log(`permissions: invalidação sem id_school válido (${id || "vazio"}) ignorada`);
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
result.version = await redis.incr(permissionsVersionKey(id));
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
log(`permissions: INCR da versão falhou na escola ${id}`, e);
|
|
163
|
+
}
|
|
164
|
+
if (options.legacy && typeof redis.scanIterator === "function" && typeof redis.del === "function") {
|
|
165
|
+
try {
|
|
166
|
+
const batch = [];
|
|
167
|
+
for await (const item of redis.scanIterator({ MATCH: `perms:${id}:*`, COUNT: 200 })) {
|
|
168
|
+
for (const key of Array.isArray(item) ? item : [item])
|
|
169
|
+
batch.push(key);
|
|
170
|
+
if (batch.length >= 200) {
|
|
171
|
+
const keys = batch.splice(0);
|
|
172
|
+
await redis.del(keys);
|
|
173
|
+
result.legacyDeleted += keys.length;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (batch.length) {
|
|
177
|
+
await redis.del(batch);
|
|
178
|
+
result.legacyDeleted += batch.length;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
log(`permissions: limpeza das chaves antigas falhou na escola ${id}`, e);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tenant/permissions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mybuildex/pkg",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Infra comum das APIs MyBuilder: multitenancy Prisma (pool único), middleware de tenant e CORS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"build": "tsc",
|
|
29
29
|
"test": "vitest run",
|
|
30
30
|
"test:watch": "vitest",
|
|
31
|
-
"prepack": "npm run build"
|
|
31
|
+
"prepack": "npm run build",
|
|
32
|
+
"acl:generate": "node scripts/generate-acl-map.mjs"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
35
|
"@fastify/compress": "^7.0.3",
|
|
@@ -41,7 +42,8 @@
|
|
|
41
42
|
"firebase": "^10.6.0",
|
|
42
43
|
"firebase-admin": "^11.11.0",
|
|
43
44
|
"mariadb": "3.4.5",
|
|
44
|
-
"prisma": "7.10.0"
|
|
45
|
+
"prisma": "7.10.0",
|
|
46
|
+
"redis": "^5.12.1"
|
|
45
47
|
},
|
|
46
48
|
"peerDependencies": {
|
|
47
49
|
"fastify": ">=4"
|