CentralBackend/services/permissions/PermissionService.js

50 lines
1.9 KiB
JavaScript

const PermissionRepository = require('../../repositories/permissions/PermissionRepository');
const db = require('../../database/database');
const { logger } = require('../../middleware/logger');
class PermissionService {
static async userHasPermission(userId, permissionName) {
if (!userId || !permissionName) return false;
try {
const [rows] = await db.query(
`SELECT 1 FROM user_permissions up
JOIN permissions p ON up.permission_id = p.id
WHERE up.user_id = ? AND p.name = ? AND p.is_active = TRUE
LIMIT 1`,
[userId, permissionName]
);
return rows.length > 0;
} catch (error) {
logger.error('PermissionService.userHasPermission:error', { userId, permissionName, error: error.message });
return false;
}
}
static async getAllPermissions(unitOfWork) {
logger.info('PermissionService.getAllPermissions:start');
try {
const repo = new PermissionRepository(unitOfWork);
const permissions = await repo.getAllPermissions();
logger.info('PermissionService.getAllPermissions:success', { count: permissions.length });
return permissions;
} catch (error) {
logger.error('PermissionService.getAllPermissions:error', { error: error.message });
throw error;
}
}
static async createPermission(data, userId, unitOfWork) {
logger.info('PermissionService.createPermission:start', { userId, name: data.name });
try {
const repo = new PermissionRepository(unitOfWork);
const permission = await repo.createPermission({ ...data, created_by: userId });
logger.info('PermissionService.createPermission:success', { id: permission.id, name: permission.name });
return permission;
} catch (error) {
logger.error('PermissionService.createPermission:error', { userId, error: error.message });
throw error;
}
}
}
module.exports = PermissionService;