UNPKG

@brandazm/dynamic-permissions

Version:

A flexible and powerful permissions management system for NestJS applications with built-in security features

106 lines 4.29 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuditService = void 0; const common_1 = require("@nestjs/common"); const typeorm_1 = require("@nestjs/typeorm"); const typeorm_2 = require("typeorm"); const config_service_1 = require("./config.service"); const audit_log_entity_1 = require("../models/audit-log.entity"); let AuditService = class AuditService { constructor(auditRepository, configService) { this.auditRepository = auditRepository; this.configService = configService; } async logPermissionCheck(userId, route, result, metadata = {}) { if (!this.configService.getConfig().security.enableAuditLog) { return; } await this.createAuditLog({ userId, action: 'check', target: route, result, metadata, }); } async logPermissionChange(userId, permission, action, targetUserId, metadata = {}) { if (!this.configService.getConfig().security.enableAuditLog) { return; } await this.createAuditLog({ userId, action, target: permission, result: true, metadata: Object.assign(Object.assign({}, metadata), { targetUserId }), }); } async logPermissionModification(userId, permission, metadata = {}) { if (!this.configService.getConfig().security.enableAuditLog) { return; } await this.createAuditLog({ userId, action: 'modify', target: permission, result: true, metadata, }); } async getAuditLogs(filters = {}) { const { userId, action, target, result, startDate, endDate, limit = 100, offset = 0 } = filters; const query = this.auditRepository.createQueryBuilder('audit'); if (userId) { query.andWhere('audit.userId = :userId', { userId }); } if (action) { query.andWhere('audit.action = :action', { action }); } if (target) { query.andWhere('audit.target = :target', { target }); } if (result !== undefined) { query.andWhere('audit.result = :result', { result }); } if (startDate && endDate) { query.andWhere({ timestamp: (0, typeorm_2.Between)(startDate, endDate), }); } else if (startDate) { query.andWhere({ timestamp: (0, typeorm_2.MoreThanOrEqual)(startDate), }); } else if (endDate) { query.andWhere({ timestamp: (0, typeorm_2.LessThanOrEqual)(endDate), }); } query.orderBy('audit.timestamp', 'DESC').skip(offset).take(limit); return query.getMany(); } async createAuditLog(log) { await this.auditRepository.save(Object.assign(Object.assign({}, log), { timestamp: new Date() })); } }; exports.AuditService = AuditService; exports.AuditService = AuditService = __decorate([ (0, common_1.Injectable)(), __param(0, (0, typeorm_1.InjectRepository)(audit_log_entity_1.AuditLogEntity)), __metadata("design:paramtypes", [typeorm_2.Repository, config_service_1.ConfigService]) ], AuditService); //# sourceMappingURL=audit.service.js.map