@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
86 lines • 2.78 kB
JavaScript
;
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