@flusys/nestjs-shared 8.1.4 → 9.1.0-rc.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 +48 -2
- package/classes/api-service.class.d.ts +3 -0
- package/constants/permissions.d.ts +46 -0
- package/exceptions/base-app.exception.d.ts +3 -2
- package/fesm/{509.js → 183.js} +43 -37
- package/fesm/470.js +228 -105
- package/fesm/667.js +28 -10
- package/fesm/{67.js → 681.js} +97 -19
- package/fesm/{720.js → 948.js} +60 -7
- package/fesm/chunks/123.js +9 -10
- package/fesm/chunks/37.js +7 -8
- package/fesm/classes/index.js +10 -4
- package/fesm/constants/index.js +53 -1
- package/fesm/decorators/index.js +4 -4
- package/fesm/dtos/index.js +2 -2
- package/fesm/guards/index.js +48 -426
- package/fesm/index.js +422 -341
- package/fesm/interceptors/index.js +62 -23
- package/fesm/interfaces/index.js +16 -3
- package/fesm/middlewares/index.js +5 -3
- package/fesm/modules/index.js +6 -414
- package/fesm/pipes/index.js +196 -0
- package/fesm/utils/index.js +125 -10
- package/index.d.ts +1 -0
- package/interfaces/datasource.interface.d.ts +2 -0
- package/interfaces/index.d.ts +3 -0
- package/interfaces/message-ref.interface.d.ts +4 -0
- package/interfaces/permission-action-registry.interface.d.ts +12 -0
- package/interfaces/permission-resolver.interface.d.ts +9 -0
- package/middlewares/logger.middleware.d.ts +4 -0
- package/modules/shared-permission-cache/shared-permission-cache.service.d.ts +5 -0
- package/package.json +8 -2
- package/pipes/dto-body-validation.pipe.d.ts +18 -0
- package/pipes/index.d.ts +1 -0
- package/utils/cache-tenant.util.d.ts +2 -0
- package/utils/index.d.ts +3 -0
- package/utils/message-ref.util.d.ts +2 -0
- package/utils/permission-match.util.d.ts +1 -0
- package/utils/query-helpers.util.d.ts +2 -1
package/fesm/guards/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as __rspack_external__flusys_nestjs_core_config_197fa0a9 from "@flusys/nestjs-core/config";
|
|
2
|
-
import * as __rspack_external__nestjs_common_a04939da from "@nestjs/common";
|
|
3
1
|
import * as __rspack_external__nestjs_core_d7b00a1a from "@nestjs/core";
|
|
4
2
|
import * as __rspack_external__nestjs_passport_18907953 from "@nestjs/passport";
|
|
5
3
|
import * as __rspack_external__keyv_redis_139d03ca from "@keyv/redis";
|
|
@@ -94,400 +92,6 @@ class HybridCache {
|
|
|
94
92
|
}
|
|
95
93
|
|
|
96
94
|
|
|
97
|
-
},
|
|
98
|
-
43(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
99
|
-
/* import */ var _permissions_js__rspack_import_0 = __webpack_require__(975);
|
|
100
|
-
/* import */ var _message_keys_js__rspack_import_1 = __webpack_require__(389);
|
|
101
|
-
// Metadata keys
|
|
102
|
-
const IS_PUBLIC_KEY = 'isPublic';
|
|
103
|
-
const PERMISSIONS_KEY = 'permissions';
|
|
104
|
-
const DOMAIN_EVENT_HANDLER_KEY = 'domainEventHandler';
|
|
105
|
-
// Injection tokens
|
|
106
|
-
const CACHE_INSTANCE = 'CACHE_INSTANCE';
|
|
107
|
-
const PERMISSION_GUARD_CONFIG = 'PERMISSION_GUARD_CONFIG';
|
|
108
|
-
const EVENT_BUS_INSTANCE = 'EVENT_BUS_INSTANCE';
|
|
109
|
-
const EVENT_BUS_MODULE_OPTIONS = 'EVENT_BUS_MODULE_OPTIONS';
|
|
110
|
-
// Header names
|
|
111
|
-
const IDEMPOTENCY_KEY_HEADER = 'x-idempotency-key';
|
|
112
|
-
const REQUEST_ID_HEADER = 'x-request-id';
|
|
113
|
-
const CLIENT_TYPE_HEADER = 'x-client-type';
|
|
114
|
-
// Cache key prefixes
|
|
115
|
-
const PERMISSIONS_CACHE_PREFIX = 'my-permissions';
|
|
116
|
-
const IDEMPOTENCY_CACHE_PREFIX = 'idempotency';
|
|
117
|
-
// Event bus defaults
|
|
118
|
-
const DEFAULT_EVENT_EXCHANGE = 'flusys.events';
|
|
119
|
-
const DEFAULT_EVENT_TOPIC = 'flusys.domain-events';
|
|
120
|
-
const DEFAULT_EVENT_SERVICE_NAME = 'flusys';
|
|
121
|
-
// Permission codes
|
|
122
|
-
|
|
123
|
-
// Message keys for localization
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
127
|
-
BC: () => (/* reexport safe */ _permissions_js__rspack_import_0.BC),
|
|
128
|
-
Bz: () => (/* reexport safe */ _permissions_js__rspack_import_0.Bz),
|
|
129
|
-
Em: () => (/* reexport safe */ _permissions_js__rspack_import_0.Em),
|
|
130
|
-
GT: () => (/* reexport safe */ _permissions_js__rspack_import_0.GT),
|
|
131
|
-
Jj: () => (/* reexport safe */ _permissions_js__rspack_import_0.Jj),
|
|
132
|
-
N3: () => (/* reexport safe */ _permissions_js__rspack_import_0.N3),
|
|
133
|
-
ON: () => (/* reexport safe */ _permissions_js__rspack_import_0.ON),
|
|
134
|
-
P0: () => (/* reexport safe */ _permissions_js__rspack_import_0.P0),
|
|
135
|
-
Q5: () => (/* reexport safe */ _permissions_js__rspack_import_0.Q5),
|
|
136
|
-
S6: () => (/* reexport safe */ _permissions_js__rspack_import_0.S6),
|
|
137
|
-
T: () => (/* reexport safe */ _permissions_js__rspack_import_0.T),
|
|
138
|
-
UB: () => (/* reexport safe */ _permissions_js__rspack_import_0.UB),
|
|
139
|
-
UG: () => (/* reexport safe */ _permissions_js__rspack_import_0.UG),
|
|
140
|
-
UU: () => (/* reexport safe */ _message_keys_js__rspack_import_1.UU),
|
|
141
|
-
Ub: () => (/* reexport safe */ _permissions_js__rspack_import_0.Ub),
|
|
142
|
-
V0: () => (/* reexport safe */ _permissions_js__rspack_import_0.V0),
|
|
143
|
-
Wc: () => (/* reexport safe */ _permissions_js__rspack_import_0.Wc),
|
|
144
|
-
Y3: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y3),
|
|
145
|
-
Y7: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y7),
|
|
146
|
-
_X: () => (/* reexport safe */ _permissions_js__rspack_import_0._X),
|
|
147
|
-
aO: () => (/* reexport safe */ _permissions_js__rspack_import_0.aO),
|
|
148
|
-
fS: () => (/* reexport safe */ _permissions_js__rspack_import_0.fS),
|
|
149
|
-
hg: () => (/* reexport safe */ _message_keys_js__rspack_import_1.hg),
|
|
150
|
-
l3: () => (/* reexport safe */ _permissions_js__rspack_import_0.l3),
|
|
151
|
-
mK: () => (/* reexport safe */ _message_keys_js__rspack_import_1.mK),
|
|
152
|
-
mV: () => (/* reexport safe */ _permissions_js__rspack_import_0.mV),
|
|
153
|
-
rH: () => (/* reexport safe */ _permissions_js__rspack_import_0.rH),
|
|
154
|
-
t$: () => (/* reexport safe */ _permissions_js__rspack_import_0.t$),
|
|
155
|
-
w7: () => (/* reexport safe */ _permissions_js__rspack_import_0.w7),
|
|
156
|
-
wA: () => (/* reexport safe */ _permissions_js__rspack_import_0.wA),
|
|
157
|
-
wM: () => (/* reexport safe */ _permissions_js__rspack_import_0.wM),
|
|
158
|
-
z$: () => (/* reexport safe */ _permissions_js__rspack_import_0.z$),
|
|
159
|
-
zd: () => (/* reexport safe */ _permissions_js__rspack_import_0.zd)
|
|
160
|
-
}, {
|
|
161
|
-
Hq: DEFAULT_EVENT_EXCHANGE,
|
|
162
|
-
Lw: PERMISSION_GUARD_CONFIG,
|
|
163
|
-
N7: PERMISSIONS_KEY,
|
|
164
|
-
PT: DOMAIN_EVENT_HANDLER_KEY,
|
|
165
|
-
Qj: EVENT_BUS_INSTANCE,
|
|
166
|
-
SL: EVENT_BUS_MODULE_OPTIONS,
|
|
167
|
-
fG: PERMISSIONS_CACHE_PREFIX,
|
|
168
|
-
iH: IDEMPOTENCY_KEY_HEADER,
|
|
169
|
-
jA: IS_PUBLIC_KEY,
|
|
170
|
-
kC: REQUEST_ID_HEADER,
|
|
171
|
-
mg: IDEMPOTENCY_CACHE_PREFIX,
|
|
172
|
-
nx: DEFAULT_EVENT_TOPIC,
|
|
173
|
-
xw: CLIENT_TYPE_HEADER,
|
|
174
|
-
zl: CACHE_INSTANCE
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
},
|
|
179
|
-
389(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
180
|
-
// ==================== AUTH (Shared across guards/interceptors) ====================
|
|
181
|
-
// These are duplicated in nestjs-auth but needed here to avoid circular dependencies
|
|
182
|
-
const AUTH_MESSAGES = {
|
|
183
|
-
TOKEN_REQUIRED: 'auth.token.required',
|
|
184
|
-
TOKEN_INVALID: 'auth.token.invalid',
|
|
185
|
-
ENTITY_BELOG_ANOTHER_COMPANY: 'entity.belongs.another.company',
|
|
186
|
-
COMPANY_NO_ACCESS: 'auth.company.no.access'
|
|
187
|
-
};
|
|
188
|
-
// ==================== ERROR (HTTP Exceptions) ====================
|
|
189
|
-
const ERROR_MESSAGES = {
|
|
190
|
-
NOT_FOUND: 'error.not.found',
|
|
191
|
-
VALIDATION: 'error.validation',
|
|
192
|
-
UNAUTHORIZED: 'error.unauthorized',
|
|
193
|
-
FORBIDDEN: 'error.forbidden',
|
|
194
|
-
CONFLICT: 'error.conflict',
|
|
195
|
-
DB_FOREIGN_KEY: 'error.db.foreign.key',
|
|
196
|
-
DB_NOT_NULL: 'error.db.not.null',
|
|
197
|
-
DB_INVALID_INPUT: 'error.db.invalid.input',
|
|
198
|
-
DB_VALUE_TOO_LONG: 'error.db.value.too.long',
|
|
199
|
-
DB_CHECK_CONSTRAINT: 'error.db.check.constraint',
|
|
200
|
-
DB_DEADLOCK: 'error.db.deadlock',
|
|
201
|
-
INTERNAL: 'error.internal',
|
|
202
|
-
SERVICE_UNAVAILABLE: 'error.service.unavailable',
|
|
203
|
-
UNKNOWN: 'error.unknown',
|
|
204
|
-
HTTP: 'error.http',
|
|
205
|
-
GENERIC: 'error.generic',
|
|
206
|
-
PERMISSION_SYSTEM_UNAVAILABLE: 'error.permission.system.unavailable',
|
|
207
|
-
INSUFFICIENT_PERMISSIONS: 'error.insufficient.permissions',
|
|
208
|
-
INSUFFICIENT_PERMISSIONS_OR: 'error.insufficient.permissions.or',
|
|
209
|
-
NO_PERMISSIONS_FOUND: 'error.no.permissions.found',
|
|
210
|
-
ENDPOINT_DISABLED: 'error.endpoint.disabled'
|
|
211
|
-
};
|
|
212
|
-
// ==================== SYSTEM (Infrastructure) ====================
|
|
213
|
-
const SYSTEM_MESSAGES = {
|
|
214
|
-
REPOSITORY_NOT_AVAILABLE: 'system.repository.not.available',
|
|
215
|
-
DATASOURCE_NOT_AVAILABLE: 'system.datasource.not.available',
|
|
216
|
-
DATABASE_CONFIG_NOT_AVAILABLE: 'system.database.config.not.available',
|
|
217
|
-
SERVICE_NOT_AVAILABLE: 'system.service.not.available',
|
|
218
|
-
CONFIG_REQUIRED: 'system.config.required',
|
|
219
|
-
INTERNAL_ERROR: 'system.internal.error',
|
|
220
|
-
DUPLICATE_REQUEST: 'system.duplicate.request',
|
|
221
|
-
INVALID_TENANT_ID: 'system.invalid.tenant.id',
|
|
222
|
-
TENANT_NOT_FOUND: 'system.tenant.not.found',
|
|
223
|
-
TENANT_HEADER_REQUIRED: 'system.tenant.header.required',
|
|
224
|
-
MISSING_PARAMETER: 'system.missing.parameter',
|
|
225
|
-
SDK_NOT_INSTALLED: 'system.sdk.not.installed',
|
|
226
|
-
PATH_TRAVERSAL_DETECTED: 'system.path.traversal.detected',
|
|
227
|
-
INVALID_FILE_KEY: 'system.invalid.file.key'
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
231
|
-
}, {
|
|
232
|
-
UU: ERROR_MESSAGES,
|
|
233
|
-
hg: SYSTEM_MESSAGES,
|
|
234
|
-
mK: AUTH_MESSAGES
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
},
|
|
239
|
-
975(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
240
|
-
// ==================== AUTH MODULE ====================
|
|
241
|
-
const USER_PERMISSIONS = {
|
|
242
|
-
CREATE: 'user.create',
|
|
243
|
-
READ: 'user.read',
|
|
244
|
-
UPDATE: 'user.update',
|
|
245
|
-
DELETE: 'user.delete',
|
|
246
|
-
LOOKUP: 'user.lookup'
|
|
247
|
-
};
|
|
248
|
-
const COMPANY_PERMISSIONS = {
|
|
249
|
-
CREATE: 'company.create',
|
|
250
|
-
READ: 'company.read',
|
|
251
|
-
UPDATE: 'company.update',
|
|
252
|
-
DELETE: 'company.delete'
|
|
253
|
-
};
|
|
254
|
-
const BRANCH_PERMISSIONS = {
|
|
255
|
-
CREATE: 'branch.create',
|
|
256
|
-
READ: 'branch.read',
|
|
257
|
-
UPDATE: 'branch.update',
|
|
258
|
-
DELETE: 'branch.delete'
|
|
259
|
-
};
|
|
260
|
-
const SOCIAL_AUTH_CONFIG_PERMISSIONS = {
|
|
261
|
-
CREATE: 'social-config.create',
|
|
262
|
-
READ: 'social-config.read',
|
|
263
|
-
UPDATE: 'social-config.update',
|
|
264
|
-
DELETE: 'social-config.delete'
|
|
265
|
-
};
|
|
266
|
-
// ==================== IAM MODULE ====================
|
|
267
|
-
const ACTION_PERMISSIONS = {
|
|
268
|
-
CREATE: 'action.create',
|
|
269
|
-
READ: 'action.read',
|
|
270
|
-
UPDATE: 'action.update',
|
|
271
|
-
DELETE: 'action.delete'
|
|
272
|
-
};
|
|
273
|
-
const ROLE_PERMISSIONS = {
|
|
274
|
-
CREATE: 'role.create',
|
|
275
|
-
READ: 'role.read',
|
|
276
|
-
UPDATE: 'role.update',
|
|
277
|
-
DELETE: 'role.delete'
|
|
278
|
-
};
|
|
279
|
-
const ROLE_ACTION_PERMISSIONS = {
|
|
280
|
-
READ: 'role-action.read',
|
|
281
|
-
ASSIGN: 'role-action.assign'
|
|
282
|
-
};
|
|
283
|
-
const USER_ROLE_PERMISSIONS = {
|
|
284
|
-
READ: 'user-role.read',
|
|
285
|
-
ASSIGN: 'user-role.assign'
|
|
286
|
-
};
|
|
287
|
-
const USER_ACTION_PERMISSIONS = {
|
|
288
|
-
READ: 'user-action.read',
|
|
289
|
-
ASSIGN: 'user-action.assign'
|
|
290
|
-
};
|
|
291
|
-
const COMPANY_ACTION_PERMISSIONS = {
|
|
292
|
-
READ: 'company-action.read',
|
|
293
|
-
ASSIGN: 'company-action.assign'
|
|
294
|
-
};
|
|
295
|
-
// ==================== STORAGE MODULE ====================
|
|
296
|
-
const FILE_PERMISSIONS = {
|
|
297
|
-
CREATE: 'file.create',
|
|
298
|
-
READ: 'file.read',
|
|
299
|
-
UPDATE: 'file.update',
|
|
300
|
-
DELETE: 'file.delete',
|
|
301
|
-
VIEW_PRIVATE_ACTION: 'file.view.private'
|
|
302
|
-
};
|
|
303
|
-
const FOLDER_PERMISSIONS = {
|
|
304
|
-
CREATE: 'folder.create',
|
|
305
|
-
READ: 'folder.read',
|
|
306
|
-
UPDATE: 'folder.update',
|
|
307
|
-
DELETE: 'folder.delete'
|
|
308
|
-
};
|
|
309
|
-
const STORAGE_CONFIG_PERMISSIONS = {
|
|
310
|
-
CREATE: 'storage-config.create',
|
|
311
|
-
READ: 'storage-config.read',
|
|
312
|
-
UPDATE: 'storage-config.update',
|
|
313
|
-
DELETE: 'storage-config.delete'
|
|
314
|
-
};
|
|
315
|
-
const UPLOAD_CONFIG_PERMISSIONS = {
|
|
316
|
-
DELETE: 'upload-config.delete'
|
|
317
|
-
};
|
|
318
|
-
// ==================== EMAIL MODULE ====================
|
|
319
|
-
const EMAIL_CONFIG_PERMISSIONS = {
|
|
320
|
-
CREATE: 'email-config.create',
|
|
321
|
-
READ: 'email-config.read',
|
|
322
|
-
UPDATE: 'email-config.update',
|
|
323
|
-
DELETE: 'email-config.delete'
|
|
324
|
-
};
|
|
325
|
-
const EMAIL_TEMPLATE_PERMISSIONS = {
|
|
326
|
-
CREATE: 'email-template.create',
|
|
327
|
-
READ: 'email-template.read',
|
|
328
|
-
UPDATE: 'email-template.update',
|
|
329
|
-
DELETE: 'email-template.delete'
|
|
330
|
-
};
|
|
331
|
-
// ==================== FORM BUILDER MODULE ====================
|
|
332
|
-
const FORM_PERMISSIONS = {
|
|
333
|
-
CREATE: 'form.create',
|
|
334
|
-
READ: 'form.read',
|
|
335
|
-
UPDATE: 'form.update',
|
|
336
|
-
DELETE: 'form.delete'
|
|
337
|
-
};
|
|
338
|
-
const FORM_RESULT_PERMISSIONS = {
|
|
339
|
-
CREATE: 'form-result.create',
|
|
340
|
-
READ: 'form-result.read',
|
|
341
|
-
UPDATE: 'form-result.update',
|
|
342
|
-
DELETE: 'form-result.delete'
|
|
343
|
-
};
|
|
344
|
-
// ==================== EVENT MANAGER MODULE ====================
|
|
345
|
-
const EVENT_PERMISSIONS = {
|
|
346
|
-
CREATE: 'event.create',
|
|
347
|
-
READ: 'event.read',
|
|
348
|
-
UPDATE: 'event.update',
|
|
349
|
-
DELETE: 'event.delete'
|
|
350
|
-
};
|
|
351
|
-
// ==================== NOTIFICATION MODULE ====================
|
|
352
|
-
const NOTIFICATION_PERMISSIONS = {
|
|
353
|
-
CREATE: 'notification.create',
|
|
354
|
-
READ: 'notification.read',
|
|
355
|
-
UPDATE: 'notification.update',
|
|
356
|
-
DELETE: 'notification.delete'
|
|
357
|
-
};
|
|
358
|
-
// ==================== LOCALIZATION MODULE ====================
|
|
359
|
-
const LANGUAGE_PERMISSIONS = {
|
|
360
|
-
CREATE: 'language.create',
|
|
361
|
-
READ: 'language.read',
|
|
362
|
-
UPDATE: 'language.update',
|
|
363
|
-
DELETE: 'language.delete'
|
|
364
|
-
};
|
|
365
|
-
const TRANSLATION_KEY_PERMISSIONS = {
|
|
366
|
-
CREATE: 'translation-key.create',
|
|
367
|
-
READ: 'translation-key.read',
|
|
368
|
-
UPDATE: 'translation-key.update',
|
|
369
|
-
DELETE: 'translation-key.delete'
|
|
370
|
-
};
|
|
371
|
-
const TRANSLATION_PERMISSIONS = {
|
|
372
|
-
CREATE: 'translation.create',
|
|
373
|
-
READ: 'translation.read',
|
|
374
|
-
UPDATE: 'translation.update',
|
|
375
|
-
DELETE: 'translation.delete'
|
|
376
|
-
};
|
|
377
|
-
// ==================== TASK MANAGER MODULE ====================
|
|
378
|
-
const TASK_BOARD_PERMISSIONS = {
|
|
379
|
-
CREATE: 'task-board.create',
|
|
380
|
-
READ: 'task-board.read',
|
|
381
|
-
UPDATE: 'task-board.update',
|
|
382
|
-
DELETE: 'task-board.delete',
|
|
383
|
-
MANAGE_MEMBERS: 'task-board.manage-members'
|
|
384
|
-
};
|
|
385
|
-
const TASK_LIST_PERMISSIONS = {
|
|
386
|
-
CREATE: 'task-list.create',
|
|
387
|
-
READ: 'task-list.read',
|
|
388
|
-
UPDATE: 'task-list.update',
|
|
389
|
-
DELETE: 'task-list.delete'
|
|
390
|
-
};
|
|
391
|
-
const TASK_PERMISSIONS = {
|
|
392
|
-
CREATE: 'task.create',
|
|
393
|
-
READ: 'task.read',
|
|
394
|
-
UPDATE: 'task.update',
|
|
395
|
-
DELETE: 'task.delete',
|
|
396
|
-
MOVE: 'task.move',
|
|
397
|
-
ASSIGN: 'task.assign'
|
|
398
|
-
};
|
|
399
|
-
const TASK_LABEL_PERMISSIONS = {
|
|
400
|
-
CREATE: 'task-label.create',
|
|
401
|
-
READ: 'task-label.read',
|
|
402
|
-
UPDATE: 'task-label.update',
|
|
403
|
-
DELETE: 'task-label.delete'
|
|
404
|
-
};
|
|
405
|
-
const TASK_COMMENT_PERMISSIONS = {
|
|
406
|
-
CREATE: 'task-comment.create',
|
|
407
|
-
READ: 'task-comment.read',
|
|
408
|
-
DELETE: 'task-comment.delete'
|
|
409
|
-
};
|
|
410
|
-
// ==================== AI ASSISTANT MODULE ====================
|
|
411
|
-
const AI_ASSISTANT_PERMISSIONS = {
|
|
412
|
-
VIEW_ALL_HISTORY: 'ai-assistant.view-all-history'
|
|
413
|
-
};
|
|
414
|
-
// ==================== AGGREGATED EXPORTS ====================
|
|
415
|
-
const PERMISSIONS = {
|
|
416
|
-
// Auth
|
|
417
|
-
USER: USER_PERMISSIONS,
|
|
418
|
-
COMPANY: COMPANY_PERMISSIONS,
|
|
419
|
-
BRANCH: BRANCH_PERMISSIONS,
|
|
420
|
-
SOCIAL_AUTH_CONFIG: SOCIAL_AUTH_CONFIG_PERMISSIONS,
|
|
421
|
-
// IAM
|
|
422
|
-
ACTION: ACTION_PERMISSIONS,
|
|
423
|
-
ROLE: ROLE_PERMISSIONS,
|
|
424
|
-
ROLE_ACTION: ROLE_ACTION_PERMISSIONS,
|
|
425
|
-
USER_ROLE: USER_ROLE_PERMISSIONS,
|
|
426
|
-
USER_ACTION: USER_ACTION_PERMISSIONS,
|
|
427
|
-
COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,
|
|
428
|
-
// Storage
|
|
429
|
-
FILE: FILE_PERMISSIONS,
|
|
430
|
-
FOLDER: FOLDER_PERMISSIONS,
|
|
431
|
-
STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,
|
|
432
|
-
// Email
|
|
433
|
-
EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,
|
|
434
|
-
EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,
|
|
435
|
-
// Form Builder
|
|
436
|
-
FORM: FORM_PERMISSIONS,
|
|
437
|
-
FORM_RESULT: FORM_RESULT_PERMISSIONS,
|
|
438
|
-
// Event Manager
|
|
439
|
-
EVENT: EVENT_PERMISSIONS,
|
|
440
|
-
// Notification
|
|
441
|
-
NOTIFICATION: NOTIFICATION_PERMISSIONS,
|
|
442
|
-
// Localization
|
|
443
|
-
LANGUAGE: LANGUAGE_PERMISSIONS,
|
|
444
|
-
TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,
|
|
445
|
-
TRANSLATION: TRANSLATION_PERMISSIONS,
|
|
446
|
-
// Task Manager
|
|
447
|
-
TASK_BOARD: TASK_BOARD_PERMISSIONS,
|
|
448
|
-
TASK_LIST: TASK_LIST_PERMISSIONS,
|
|
449
|
-
TASK: TASK_PERMISSIONS,
|
|
450
|
-
TASK_LABEL: TASK_LABEL_PERMISSIONS,
|
|
451
|
-
TASK_COMMENT: TASK_COMMENT_PERMISSIONS,
|
|
452
|
-
// AI Assistant
|
|
453
|
-
AI_ASSISTANT: AI_ASSISTANT_PERMISSIONS
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
457
|
-
}, {
|
|
458
|
-
BC: USER_PERMISSIONS,
|
|
459
|
-
Bz: AI_ASSISTANT_PERMISSIONS,
|
|
460
|
-
Em: STORAGE_CONFIG_PERMISSIONS,
|
|
461
|
-
GT: FORM_RESULT_PERMISSIONS,
|
|
462
|
-
Jj: PERMISSIONS,
|
|
463
|
-
N3: TRANSLATION_KEY_PERMISSIONS,
|
|
464
|
-
ON: TASK_LIST_PERMISSIONS,
|
|
465
|
-
P0: ROLE_ACTION_PERMISSIONS,
|
|
466
|
-
Q5: LANGUAGE_PERMISSIONS,
|
|
467
|
-
S6: FILE_PERMISSIONS,
|
|
468
|
-
T: TASK_PERMISSIONS,
|
|
469
|
-
UB: UPLOAD_CONFIG_PERMISSIONS,
|
|
470
|
-
UG: TASK_LABEL_PERMISSIONS,
|
|
471
|
-
Ub: EVENT_PERMISSIONS,
|
|
472
|
-
V0: EMAIL_CONFIG_PERMISSIONS,
|
|
473
|
-
Wc: FORM_PERMISSIONS,
|
|
474
|
-
Y3: TASK_BOARD_PERMISSIONS,
|
|
475
|
-
Y7: ACTION_PERMISSIONS,
|
|
476
|
-
_X: USER_ACTION_PERMISSIONS,
|
|
477
|
-
aO: COMPANY_ACTION_PERMISSIONS,
|
|
478
|
-
fS: TRANSLATION_PERMISSIONS,
|
|
479
|
-
l3: SOCIAL_AUTH_CONFIG_PERMISSIONS,
|
|
480
|
-
mV: ROLE_PERMISSIONS,
|
|
481
|
-
rH: NOTIFICATION_PERMISSIONS,
|
|
482
|
-
t$: COMPANY_PERMISSIONS,
|
|
483
|
-
w7: USER_ROLE_PERMISSIONS,
|
|
484
|
-
wA: BRANCH_PERMISSIONS,
|
|
485
|
-
wM: FOLDER_PERMISSIONS,
|
|
486
|
-
z$: EMAIL_TEMPLATE_PERMISSIONS,
|
|
487
|
-
zd: TASK_COMMENT_PERMISSIONS
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
|
|
491
95
|
},
|
|
492
96
|
374(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
493
97
|
/* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
|
|
@@ -547,8 +151,8 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
547
151
|
|
|
548
152
|
// EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/index.ts
|
|
549
153
|
var constants = __webpack_require__(43);
|
|
550
|
-
// EXTERNAL MODULE: ./projects/nestjs-shared/src/
|
|
551
|
-
var
|
|
154
|
+
// EXTERNAL MODULE: ./projects/nestjs-shared/src/middlewares/logger.middleware.ts + 2 modules
|
|
155
|
+
var logger_middleware = __webpack_require__(591);
|
|
552
156
|
// EXTERNAL MODULE: external "@nestjs/common"
|
|
553
157
|
var common_ = __webpack_require__(157);
|
|
554
158
|
// EXTERNAL MODULE: external "@nestjs/core"
|
|
@@ -583,6 +187,7 @@ function _ts_param(paramIndex, decorator) {
|
|
|
583
187
|
|
|
584
188
|
|
|
585
189
|
|
|
190
|
+
|
|
586
191
|
class JwtAuthGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
|
|
587
192
|
reflector;
|
|
588
193
|
// NOTE: @Inject(Reflector) required for bundled code - external classes need explicit injection
|
|
@@ -604,9 +209,10 @@ class JwtAuthGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGu
|
|
|
604
209
|
if (err || !user) {
|
|
605
210
|
throw err || new common_.UnauthorizedException({
|
|
606
211
|
message: 'Invalid or expired token',
|
|
607
|
-
messageKey:
|
|
212
|
+
messageKey: constants/* .AUTH_MESSAGES.TOKEN_INVALID */.mK.TOKEN_INVALID
|
|
608
213
|
});
|
|
609
214
|
}
|
|
215
|
+
(0,logger_middleware/* .setRequestUser */.ZV)(user);
|
|
610
216
|
return user;
|
|
611
217
|
}
|
|
612
218
|
}
|
|
@@ -647,6 +253,7 @@ function optional_jwt_auth_guard_ts_param(paramIndex, decorator) {
|
|
|
647
253
|
|
|
648
254
|
|
|
649
255
|
|
|
256
|
+
|
|
650
257
|
class OptionalJwtGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
|
|
651
258
|
reflector;
|
|
652
259
|
constructor(reflector){
|
|
@@ -663,6 +270,7 @@ class OptionalJwtGuard extends (0,__rspack_external__nestjs_passport_18907953.Au
|
|
|
663
270
|
return super.canActivate(context);
|
|
664
271
|
}
|
|
665
272
|
handleRequest(_err, user) {
|
|
273
|
+
(0,logger_middleware/* .setRequestUser */.ZV)(user);
|
|
666
274
|
return user || undefined;
|
|
667
275
|
}
|
|
668
276
|
}
|
|
@@ -730,7 +338,7 @@ class PermissionGuard {
|
|
|
730
338
|
const user = request.user;
|
|
731
339
|
if (!user) throw new common_.UnauthorizedException({
|
|
732
340
|
message: 'Authentication required',
|
|
733
|
-
messageKey:
|
|
341
|
+
messageKey: constants/* .AUTH_MESSAGES.TOKEN_REQUIRED */.mK.TOKEN_REQUIRED
|
|
734
342
|
});
|
|
735
343
|
if (!this.permissionCacheService?.isCacheConfigured()) {
|
|
736
344
|
throw new permission_exception/* .PermissionSystemUnavailableException */.GS();
|
|
@@ -856,8 +464,10 @@ PermissionGuard = permission_guard_ts_decorate([
|
|
|
856
464
|
657(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
857
465
|
/* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
|
|
858
466
|
/* import */ var _classes_hybrid_cache_class_js__rspack_import_1 = __webpack_require__(375);
|
|
859
|
-
/* import */ var
|
|
860
|
-
/* import */ var
|
|
467
|
+
/* import */ var _constants_index_js__rspack_import_2 = __webpack_require__(43);
|
|
468
|
+
/* import */ var _exceptions_permission_exception_js__rspack_import_3 = __webpack_require__(374);
|
|
469
|
+
/* import */ var _utils_permission_cache_key_util_js__rspack_import_4 = __webpack_require__(199);
|
|
470
|
+
/* import */ var _utils_permission_match_util_js__rspack_import_5 = __webpack_require__(788);
|
|
861
471
|
function _ts_decorate(decorators, target, key, desc) {
|
|
862
472
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
863
473
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
@@ -885,6 +495,8 @@ function _ts_param(paramIndex, decorator) {
|
|
|
885
495
|
|
|
886
496
|
|
|
887
497
|
|
|
498
|
+
|
|
499
|
+
|
|
888
500
|
class SharedPermissionCacheService {
|
|
889
501
|
cache;
|
|
890
502
|
config;
|
|
@@ -892,52 +504,56 @@ class SharedPermissionCacheService {
|
|
|
892
504
|
this.cache = cache;
|
|
893
505
|
this.config = {
|
|
894
506
|
enableCompanyFeature: false,
|
|
895
|
-
userPermissionKeyFormat:
|
|
896
|
-
companyPermissionKeyFormat:
|
|
507
|
+
userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
|
|
508
|
+
companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
|
|
897
509
|
...config
|
|
898
510
|
};
|
|
899
511
|
}
|
|
900
512
|
/** Read the cached permission codes for a user; empty array when cache is unavailable or unset */ async getPermissions(options) {
|
|
901
513
|
if (!this.cache) return [];
|
|
902
|
-
const cacheKey = (0,
|
|
514
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
903
515
|
const cached = await this.cache.get(cacheKey);
|
|
904
516
|
if (!cached) return [];
|
|
905
517
|
return Array.isArray(cached) ? cached : cached.backendCodes || [];
|
|
906
518
|
}
|
|
907
519
|
/** Overwrite the cached permission codes for a user with a fixed list */ async setPermissions(options, permissions, ttl) {
|
|
908
520
|
if (!this.cache) return;
|
|
909
|
-
const cacheKey = (0,
|
|
521
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
910
522
|
await this.cache.set(cacheKey, permissions, ttl);
|
|
911
523
|
}
|
|
912
524
|
/** Clear the cached permission codes for a user */ async clearPermissions(options) {
|
|
913
525
|
if (!this.cache) return;
|
|
914
|
-
const cacheKey = (0,
|
|
526
|
+
const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
|
|
915
527
|
await this.cache.del(cacheKey);
|
|
916
528
|
}
|
|
917
529
|
/** Check a single permission against the cached list, honoring `*` and `prefix.*` wildcards */ async hasPermission(options, requiredPermission) {
|
|
918
530
|
const permissions = await this.getPermissions(options);
|
|
919
531
|
return this.matchPermission(permissions, requiredPermission);
|
|
920
532
|
}
|
|
533
|
+
/** Throws 403 unless `user` holds `requiredPermission`; fails closed (500) when no cache is wired up. */ async assertPermission(user, requiredPermission) {
|
|
534
|
+
if (!this.isCacheConfigured()) throw new _exceptions_permission_exception_js__rspack_import_3/* .PermissionSystemUnavailableException */.GS();
|
|
535
|
+
const allowed = !!user?.id && await this.hasPermission({
|
|
536
|
+
userId: user.id,
|
|
537
|
+
companyId: user.companyId,
|
|
538
|
+
branchId: user.branchId
|
|
539
|
+
}, requiredPermission);
|
|
540
|
+
if (!allowed) throw new _exceptions_permission_exception_js__rspack_import_3/* .InsufficientPermissionsException */.z8([
|
|
541
|
+
requiredPermission
|
|
542
|
+
], 'AND');
|
|
543
|
+
}
|
|
921
544
|
/** Whether a cache instance is wired up; false means permission checks can't be served at all */ isCacheConfigured() {
|
|
922
545
|
return !!this.cache;
|
|
923
546
|
}
|
|
924
547
|
/** Match an already-fetched permission list against a required permission, honoring `*` and `prefix.*` wildcards */ matchPermission(userPermissions, requiredPermission) {
|
|
925
|
-
|
|
926
|
-
for (const permission of userPermissions){
|
|
927
|
-
if (permission === '*') return true;
|
|
928
|
-
if (permission.endsWith('.*') && requiredPermission.startsWith(permission.slice(0, -1))) {
|
|
929
|
-
return true;
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
return false;
|
|
548
|
+
return (0,_utils_permission_match_util_js__rspack_import_5/* .matchesPermission */.x)(userPermissions, requiredPermission);
|
|
933
549
|
}
|
|
934
550
|
}
|
|
935
551
|
SharedPermissionCacheService = _ts_decorate([
|
|
936
552
|
(0,_nestjs_common__rspack_import_0.Injectable)(),
|
|
937
553
|
_ts_param(0, (0,_nestjs_common__rspack_import_0.Optional)()),
|
|
938
|
-
_ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(
|
|
554
|
+
_ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .CACHE_INSTANCE */.zl)),
|
|
939
555
|
_ts_param(1, (0,_nestjs_common__rspack_import_0.Optional)()),
|
|
940
|
-
_ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(
|
|
556
|
+
_ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .PERMISSION_GUARD_CONFIG */.Lw)),
|
|
941
557
|
_ts_metadata("design:type", Function),
|
|
942
558
|
_ts_metadata("design:paramtypes", [
|
|
943
559
|
typeof _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l === "undefined" ? Object : _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l,
|
|
@@ -973,15 +589,19 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
973
589
|
|
|
974
590
|
|
|
975
591
|
},
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
592
|
+
788(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
593
|
+
/** Whether `granted` covers `required`, honoring `*` (everything) and `prefix.*` (everything under prefix) wildcards */ function matchesPermission(granted, required) {
|
|
594
|
+
if (granted.includes(required)) return true;
|
|
595
|
+
for (const permission of granted){
|
|
596
|
+
if (permission === '*') return true;
|
|
597
|
+
if (permission.endsWith('.*') && required.startsWith(permission.slice(0, -1))) return true;
|
|
598
|
+
}
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
983
601
|
|
|
984
|
-
|
|
602
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
603
|
+
x: () => (matchesPermission)
|
|
604
|
+
});
|
|
985
605
|
|
|
986
606
|
|
|
987
607
|
},
|
|
@@ -995,8 +615,10 @@ module.exports = __rspack_external__nestjs_core_d7b00a1a;
|
|
|
995
615
|
};
|
|
996
616
|
import { __webpack_require__ } from '../runtime.js';
|
|
997
617
|
var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
|
|
998
|
-
import * as __rspack_chunk_1 from '
|
|
618
|
+
import * as __rspack_chunk_1 from '../948.js';
|
|
999
619
|
__webpack_require__.C(__rspack_chunk_1);
|
|
620
|
+
import * as __rspack_chunk_2 from './index.js';
|
|
621
|
+
__webpack_require__.C(__rspack_chunk_2);
|
|
1000
622
|
var __webpack_exports__ = __webpack_exec__(510);var __webpack_exports__JwtAuthGuard = __webpack_exports__.TD;
|
|
1001
623
|
var __webpack_exports__OptionalJwtGuard = __webpack_exports__.Zb;
|
|
1002
624
|
var __webpack_exports__PermissionGuard = __webpack_exports__.LQ;
|