farmcontrol-api/src/services/management/permissionsetting.js
Tom Butcher 1c51766da6
All checks were successful
farmcontrol/farmcontrol-api/pipeline/head This commit looks good
Add user group management functionality and refactor permission settings
This commit introduces a new feature for managing user groups within the application, including the creation of a `usergroup.schema.js` file for the Mongoose schema and corresponding route handlers for CRUD operations. Additionally, the permission settings functionality has been refactored to use a singular `permissionSetting` model instead of the previous plural form. Tests have been added to ensure the functionality of both user groups and permission settings services, enhancing the application's capability to manage user roles and permissions effectively.
2026-08-20 15:04:52 +01:00

232 lines
5.6 KiB
JavaScript

import config from '../../config.js';
import { permissionSettingModel } from '../../database/schemas/management/permissionsetting.schema.js';
import log4js from 'log4js';
import mongoose from 'mongoose';
import {
deleteObject,
listObjects,
getObject,
editObject,
newObject,
listObjectsByProperties,
getModelStats,
getModelHistory,
searchObjects,
getPropertyValues,
getObjectNeighbors,
} from '../../database/database.js';
const logger = log4js.getLogger('PermissionSetting');
logger.level = config.server.logLevel;
export const listPermissionSettingsRouteHandler = async (
req,
res,
page = 1,
limit = 25,
property = '',
filter = {},
search = '',
sort = '',
order = 'ascend'
) => {
const result = await listObjects({
model: permissionSettingModel,
page,
limit,
property,
filter,
search,
sort,
order,
});
if (result?.error) {
logger.error('Error listing permission settings.');
res.status(result.code).send(result);
return;
}
logger.debug(
`List of permission settings (Page ${page}, Limit ${limit}). Count: ${result.length}.`
);
res.send(result);
};
export const listPermissionSettingsByPropertiesRouteHandler = async (
req,
res,
properties = '',
filter = {},
masterFilter = {}
) => {
const result = await listObjectsByProperties({
model: permissionSettingModel,
properties,
filter,
masterFilter,
});
if (result?.error) {
logger.error('Error listing permission settings.');
res.status(result.code).send(result);
return;
}
logger.debug(`List of permission settings. Count: ${result.length}`);
res.send(result);
};
export const getPermissionSettingsPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: permissionSettingModel,
property,
});
res.send(result);
};
export const searchPermissionSettingsRouteHandler = async (req, res, search) => {
const result = await searchObjects({
model: permissionSettingModel,
search,
});
res.send(result);
};
export const getPermissionSettingsRouteHandler = async (req, res) => {
const id = req.params.id;
const result = await getObject({
model: permissionSettingModel,
id,
});
if (result?.error) {
logger.warn(`Permission settings not found with supplied id.`);
return res.status(result.code).send(result);
}
logger.debug(`Retreived permission settings with ID: ${id}`);
res.send(result);
};
export const editPermissionSettingsRouteHandler = async (req, res) => {
const id = new mongoose.Types.ObjectId(req.params.id);
logger.trace(`Permission settings with ID: ${id}`);
const updateData = {
updatedAt: new Date(),
name: req.body.name,
permissions: req.body.permissions,
};
const result = await editObject({
model: permissionSettingModel,
id,
updateData,
user: req.user,
});
if (result.error) {
logger.error('Error editing permission settings:', result.error);
res.status(result).send(result);
return;
}
logger.debug(`Edited permission settings with ID: ${id}`);
res.send(result);
};
export const newPermissionSettingsRouteHandler = async (req, res) => {
const newData = {
updatedAt: new Date(),
name: req.body.name,
permissions: req.body.permissions,
};
const result = await newObject({
model: permissionSettingModel,
newData,
user: req.user,
});
if (result.error) {
logger.error('No permission settings created:', result.error);
return res.status(result.code).send(result);
}
logger.debug(`New permission settings with ID: ${result._id}`);
res.send(result);
};
export const deletePermissionSettingsRouteHandler = async (req, res) => {
const id = new mongoose.Types.ObjectId(req.params.id);
logger.trace(`Permission settings with ID: ${id}`);
const result = await deleteObject({
model: permissionSettingModel,
id,
user: req.user,
});
if (result.error) {
logger.error('No permission settings deleted:', result.error);
return res.status(result.code).send(result);
}
logger.debug(`Deleted permission settings with ID: ${result._id}`);
res.send(result);
};
export const getPermissionSettingsStatsRouteHandler = async (req, res) => {
const result = await getModelStats({ model: permissionSettingModel });
if (result?.error) {
logger.error('Error fetching permission settings stats:', result.error);
return res.status(result.code).send(result);
}
logger.trace('Permission settings stats:', result);
res.send(result);
};
export const getPermissionSettingsHistoryRouteHandler = async (req, res) => {
const from = req.query.from;
const to = req.query.to;
const result = await getModelHistory({ model: permissionSettingModel, from, to });
if (result?.error) {
logger.error('Error fetching permission settings history:', result.error);
return res.status(result.code).send(result);
}
logger.trace('Permission settings history:', result);
res.send(result);
};
export const getPermissionSettingsNeighborsRouteHandler = async (
req,
res,
property = '',
filter = {},
search = '',
sort = '',
order = 'ascend',
id
) => {
if (!id) {
return res.status(400).send({ error: 'Missing id parameter', code: 400 });
}
const result = await getObjectNeighbors({
model: permissionSettingModel,
id,
filter,
search,
sort,
order,
});
if (result?.error) {
logger.error('Error fetching permissionSettings neighbors.');
return res.status(result.code).send(result);
}
logger.debug(`Retrieved permissionSettings neighbors for ID: ${id}`);
res.send(result);
};