55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
const Joi = require('joi');
|
|
const { pageQuery, limitQuery } = require('../../utils/pagination.validation');
|
|
|
|
const createRoleSchema = Joi.object({
|
|
name: Joi.string().max(100).required(),
|
|
description: Joi.string().allow(null, '').optional(),
|
|
is_active: Joi.boolean().default(true),
|
|
permission_ids: Joi.array().items(Joi.number().integer().positive()).optional(),
|
|
view_modules: Joi.array().items(Joi.string().max(50)).optional(),
|
|
});
|
|
|
|
const updateRoleSchema = Joi.object({
|
|
name: Joi.string().max(100).optional(),
|
|
description: Joi.string().allow(null, '').optional(),
|
|
is_active: Joi.boolean().optional(),
|
|
}).min(1);
|
|
|
|
const assignPermissionsSchema = Joi.object({
|
|
permission_ids: Joi.array().items(Joi.number().integer().positive()).default([]),
|
|
});
|
|
|
|
const permissionMatrixSchema = Joi.object({
|
|
matrix: Joi.array()
|
|
.items(
|
|
Joi.object({
|
|
module_id: Joi.number().integer().positive().required(),
|
|
actions: Joi.object({
|
|
view: Joi.boolean().required(),
|
|
create: Joi.boolean().required(),
|
|
edit: Joi.boolean().required(),
|
|
delete: Joi.boolean().required(),
|
|
approve: Joi.boolean().required(),
|
|
export: Joi.boolean().required(),
|
|
}).required(),
|
|
})
|
|
)
|
|
.min(1)
|
|
.required(),
|
|
});
|
|
|
|
const listRolesQuerySchema = Joi.object({
|
|
page: pageQuery(),
|
|
limit: limitQuery(),
|
|
search: Joi.string().allow('').optional(),
|
|
is_active: Joi.boolean().optional(),
|
|
});
|
|
|
|
module.exports = {
|
|
createRoleSchema,
|
|
updateRoleSchema,
|
|
assignPermissionsSchema,
|
|
permissionMatrixSchema,
|
|
listRolesQuerySchema,
|
|
};
|