UNPKG

@kitstack/nest-powertools

Version:

A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development

86 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TimeBasedGuard = exports.OwnershipGuard = exports.PermissionBasedGuard = exports.RoleBasedGuard = exports.GuardRegistryService = void 0; class GuardRegistryService { constructor() { this.guards = {}; } static getInstance() { if (!GuardRegistryService.instance) { GuardRegistryService.instance = new GuardRegistryService(); } return GuardRegistryService.instance; } registerGuard(name, guard) { this.guards[name] = guard; } getGuard(name) { return this.guards[name]; } getAllGuards() { return { ...this.guards }; } removeGuard(name) { if (this.guards[name]) { delete this.guards[name]; return true; } return false; } } exports.GuardRegistryService = GuardRegistryService; class RoleBasedGuard { constructor(allowedRoles) { this.allowedRoles = allowedRoles; } canActivate(context, user) { if (!user || !user.roles) { return false; } return this.allowedRoles.some((role) => user.roles.includes(role)); } } exports.RoleBasedGuard = RoleBasedGuard; class PermissionBasedGuard { constructor(requiredPermissions) { this.requiredPermissions = requiredPermissions; } canActivate(context, user) { if (!user || !user.permissions) { return false; } return this.requiredPermissions.every((permission) => user.permissions.includes(permission)); } } exports.PermissionBasedGuard = PermissionBasedGuard; class OwnershipGuard { constructor(resourceIdParam = 'id') { this.resourceIdParam = resourceIdParam; } canActivate(context, user) { const request = context.switchToHttp().getRequest(); const resourceId = request.params[this.resourceIdParam]; return user.id === resourceId || user.roles?.includes('admin'); } } exports.OwnershipGuard = OwnershipGuard; class TimeBasedGuard { constructor(allowedHours = { start: 9, end: 17, }) { this.allowedHours = allowedHours; } canActivate(context, user) { const currentHour = new Date().getHours(); return (currentHour >= this.allowedHours.start && currentHour <= this.allowedHours.end); } } exports.TimeBasedGuard = TimeBasedGuard; const registry = GuardRegistryService.getInstance(); registry.registerGuard('role', new RoleBasedGuard([])); registry.registerGuard('permission', new PermissionBasedGuard([])); registry.registerGuard('ownership', new OwnershipGuard()); registry.registerGuard('timeBased', new TimeBasedGuard()); //# sourceMappingURL=guard-registry.js.map