50 lines
1.9 KiB
JavaScript
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; |