From b6351f5f1e9a4c43b4111d2b59ca4568fd84fc03 Mon Sep 17 00:00:00 2001 From: Pau Date: Tue, 15 Apr 2025 19:29:49 +0200 Subject: [PATCH] fixed roles_has_permission to use better nomenclature --- .../roles_has_permissionsController.js | 12 +- .../roles_has_permissionsModel.js | 5 +- .../roles_has_permissionsRepository.js | 49 ++++---- src/routes/index.js | 114 +++++++++++------- 4 files changed, 107 insertions(+), 73 deletions(-) diff --git a/src/controllers/authorization/roles_has_permissionsController.js b/src/controllers/authorization/roles_has_permissionsController.js index 472ba1a..f52b760 100644 --- a/src/controllers/authorization/roles_has_permissionsController.js +++ b/src/controllers/authorization/roles_has_permissionsController.js @@ -15,7 +15,7 @@ const getRolesHasPermissionsController = (req, res, next, config) => { const conn = mysql.start(config) const uuidList = req.query.uuidList && req.query.uuidList.split(',') Promise.all([ - getRolesHasPermissionsModel({...req.query, uuidList, conn}), + getRolesHasPermissionsModel({...req.query, ...req.params, uuidList, conn}), countRolesHasPermissionsModel({...req.query, uuidList, conn}) ]) .then(([getResults, countResults]) => { @@ -68,7 +68,7 @@ const postRolesHasPermissionsController = (req, res, next, config) => { const conn = mysql.start(config) const createdBy = req.auth.user || null - insertRolesHasPermissionsModel({...req.body, createdBy, conn}) + insertRolesHasPermissionsModel({...req.body, ...req.params, createdBy, conn}) .then((roles_has_permissions) => { const result = { _data: roles_has_permissions @@ -86,11 +86,10 @@ const postRolesHasPermissionsController = (req, res, next, config) => { const putRolesHasPermissionsController = (req, res, next, config) => { const conn = mysql.start(config) - const uuid = req.params.uuid - modifyRolesHasPermissionsModel({ ...req.body, uuid, modifiedBy, conn }) + modifyRolesHasPermissionsModel({ ...req.body, ...req.params, modifiedBy, conn }) .then((roles_has_permissions) => { - if (noResults(roles_has_permissions)) { + if (noResults(response)) { const err = error404() const error = errorHandler(err, config.environment) return sendResponseNotFound(res, error) @@ -111,11 +110,10 @@ const putRolesHasPermissionsController = (req, res, next, config) => { const softDeleteRolesHasPermissionsController = (req, res, next, config) => { const conn = mysql.start(config) - const uuid = req.params.uuid const { deleted } = req.body const deletedby = req.auth.user || null - softDeleteRolesHasPermissionsModel({ uuid, deleted, deletedby, conn }) + softDeleteRolesHasPermissionsModel({ ...req.params, deleted, deletedby, conn }) .then(() => { const result = {} next(result) diff --git a/src/models/authorization/roles_has_permissionsModel.js b/src/models/authorization/roles_has_permissionsModel.js index 75747e7..df6b568 100644 --- a/src/models/authorization/roles_has_permissionsModel.js +++ b/src/models/authorization/roles_has_permissionsModel.js @@ -8,6 +8,7 @@ import { softDeleteRolesHasPermissionsQuery, modifyRolesHasPermissionsQuery } from '../../repositories/authorization/roles_has_permissionsRepository.js' +import { error404 } from '../../utils/errors.js' const getRolesHasPermissionsModel = ({conn, ...rest}) => { const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss') @@ -15,7 +16,7 @@ const getRolesHasPermissionsModel = ({conn, ...rest}) => { return mysql .execute(getRolesHasPermissionsQuery(paramsToSearch), conn, paramsToSearch) - .then(results => results.map(({id, created, deleted, createdBy, deletedBy, ...resultFiltered}) => resultFiltered)) + .then(results => results.map(({id, fk_role, fk_permission, created, deleted, createdBy, deletedBy, ...resultFiltered}) => resultFiltered)) } const countRolesHasPermissionsModel = ({conn, ...rest}) => { @@ -34,7 +35,7 @@ const insertRolesHasPermissionsModel = ({conn, ...rest}) => { return mysql .execute(insertRolesHasPermissionsQuery(paramsToInsert), conn, paramsToInsert) - .then(results => results[1].map(({id, uuid, fk_role, fk_permission, created, deleted, createdBy, deletedBy, ...rest}) => ({...rest}))) + .then(results => results[1].map(({id, fk_role, fk_permission, created, deleted, createdBy, deletedBy, ...rest}) => ({...rest}))) } const modifyRolesHasPermissionsModel = ({conn, ...params}) => { diff --git a/src/repositories/authorization/roles_has_permissionsRepository.js b/src/repositories/authorization/roles_has_permissionsRepository.js index f60d936..a8bb934 100644 --- a/src/repositories/authorization/roles_has_permissionsRepository.js +++ b/src/repositories/authorization/roles_has_permissionsRepository.js @@ -1,10 +1,10 @@ import { pagination } from '../../utils/pagination.js' -const _rolesHasPermissionsQuery = (_pagination = '') => ({count}) => ({uuid, fk_permission, fk_role, roleName}) => { +const _rolesHasPermissionsQuery = (_pagination = '') => ({count}) => ({uuid, role_uuid, permission_uuid, roleName}) => { const uuidCondition = uuid ? 'AND r.uuid = :uuid' : ''; - const roleNameCondition = roleName ? 'AND fk_role = (SELECT id from dbmaster.roles WHERE name = :roleName)' : ''; - const roleUuidCondition = fk_role ? 'AND fk_role = (SELECT id from dbmaster.roles WHERE uuid = :fk_role)' : ''; - const permissionsUuidCondition = fk_permission ? 'AND fk_permission = (SELECT id from dbmaster.permissions WHERE uuid = :fk_permission)' : ''; + const roleUuidCondition = role_uuid ? 'AND fk_role = (SELECT id from mydb.roles WHERE uuid = :role_uuid)' : ''; + const roleNameCondition = roleName ? 'AND fk_role = (SELECT id from mydb.roles WHERE name = :roleName)' : ''; + const permissionsUuidCondition = permission_uuid ? 'AND fk_permission = (SELECT id from mydb.permissions WHERE uuid = :permission_uuid)' : ''; return ` SELECT ${count || @@ -15,13 +15,13 @@ const _rolesHasPermissionsQuery = (_pagination = '') => ({count}) => ({uuid, fk_ p.uuid as permission_uuid, p.fk_endpoint as permission_endpoint`} FROM - dbmaster.roles_has_permissions as r + mydb.roles_has_permissions as r JOIN - dbmaster.roles as r2 ON r.fk_role = r2.id + mydb.roles as r2 ON r.fk_role = r2.id AND r2.created <= :now AND (r2.deleted > :now OR r2.deleted IS NULL) JOIN - dbmaster.permissions as p ON r.fk_permission = p.id + mydb.permissions as p ON r.fk_permission = p.id AND p.created <= :now AND (p.deleted > :now OR p.deleted IS NULL) WHERE @@ -45,7 +45,7 @@ const countRolesHasPermissionsQuery = rest => const insertRolesHasPermissionsQuery = () => { return ` - INSERT INTO dbmaster.roles_has_permissions ( + INSERT INTO mydb.roles_has_permissions ( uuid, fk_role, fk_permission, @@ -54,48 +54,51 @@ const insertRolesHasPermissionsQuery = () => { ) VALUES ( :uuid, - (SELECT id FROM dbmaster.roles WHERE uuid = :fk_role), - (SELECT id FROM dbmaster.permissions WHERE uuid = :fk_permission), + (SELECT id FROM mydb.roles WHERE uuid = :role_uuid), + (SELECT id FROM mydb.permissions WHERE uuid = :permission_uuid), :now, :createdBy ); - SELECT dbmaster.permissions.*, + SELECT permissions.*, permissions.uuid as permission_uuid, roles.uuid as role_uuid, roles.name as role_name - FROM dbmaster.roles_has_permissions as rp - LEFT JOIN dbmaster.permissions as permissions ON rp.fk_permission = permissions.id - LEFT JOIN dbmaster.roles as roles ON rp.fk_role = roles.id + FROM mydb.roles_has_permissions as rp + LEFT JOIN mydb.permissions as permissions ON rp.fk_permission = permissions.id + LEFT JOIN mydb.roles as roles ON rp.fk_role = roles.id WHERE rp.uuid = :uuid; ` } -const modifyRolesHasPermissionsQuery = (roleUuid, permissionUuid) => { - const roleUuidCondition = roleUuid ? 'fk_role = (SELECT id from dbmaster.roles WHERE uuid = :fk_role),' : ''; - const permissionUuidCondition = permissionUuid ? 'fk_permission = (SELECT id from dbmaster.permissions WHERE uuid = :fk_permission),' : ''; +const modifyRolesHasPermissionsQuery = (new_role_uuid, new_permission_uuid) => { + const roleUuidCondition = new_role_uuid ? 'fk_role = (SELECT id from mydb.roles WHERE uuid = :new_role_uuid),' : ''; + const permissionUuidCondition = new_permission_uuid ? 'fk_permission = (SELECT id from mydb.permissions WHERE uuid = :new_permission_uuid),' : ''; return ` UPDATE - dbmaster.roles_has_permissions as roles_has_permissions + mydb.roles_has_permissions as roles_has_permissions SET ${roleUuidCondition} ${permissionUuidCondition} uuid = :uuid WHERE - roles_has_permissions.uuid = :uuid + roles_has_permissions.fk_role = (SELECT id from mydb.roles WHERE uuid = :role_uuid) + AND roles_has_permissions.fk_permission = (SELECT id from mydb.permissions WHERE uuid = :permission_uuid) AND roles_has_permissions.deleted IS NULL; - SELECT * FROM dbmaster.roles_has_permissions WHERE uuid = :uuid; + SELECT * FROM mydb.roles_has_permissions WHERE uuid = :uuid; ` } -const softDeleteRolesHasPermissionsQuery = () => { +const softDeleteRolesHasPermissionsQuery = (permission_uuid) => { + const permissionUuidCondition = permission_uuid ? 'AND roles_has_permissions.fk_permission = (SELECT id from mydb.permissions WHERE uuid = :permission_uuid)' : ''; return ` UPDATE - dbmaster.roles_has_permissions as roles_has_permissions + mydb.roles_has_permissions as roles_has_permissions SET deleted = :deleted, deletedBy = :deletedBy WHERE - roles_has_permissions.uuid = :uuid + roles_has_permissions.fk_role = (SELECT id from mydb.roles WHERE uuid = :role_uuid) + ${permissionUuidCondition} AND roles_has_permissions.deleted IS NULL ` diff --git a/src/routes/index.js b/src/routes/index.js index 524fc8e..5fddaad 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -684,15 +684,15 @@ export default(config) => { //roles_has_permissions routes /** - * @name GET/roles_has_permissions + * @name GET/roles/:role_uuid/permissions * @function * @inner - * @memberof placeRouter - * @route GET /roles_has_permissions + * @memberof deviceRouter + * @route GET /roles/:role_uuid/permissions * @group Roles Permissions - Operations about roles permissions - * @param {string} uuid.path.required - The unique identifier for the role permission + * @param {string} uuid.path.optional - The unique identifier for the role permission * @param {string} fk_role.path.required - The unique identifier for the role - * @param {string} fk_permission.path.required - The unique identifier for the permission + * @param {string} fk_permission.path.optional - The unique identifier for the permission * @returns {SuccessResponse} 200 - The role permission object * @returns {ErrorResponse} 404 - Role permission not found * @returns {ErrorResponse} 422 - Unprocessable entity @@ -700,13 +700,14 @@ export default(config) => { * @returns {ErrorResponse} 403 - Forbidden */ routes.get( - '/roles_has_permissions', + '/roles/:role_uuid/permissions', (req, res, next) => authenticateToken(req, res, next, config), - (req, res, next) => authorizePermission('/roles_has_permissions')(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions')(req, res, next, config), [ uuid('uuid').optional({ nullable: false, values: 'falsy' }), - uuid('fk_role').optional({ nullable: false, values: 'falsy' }), - uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) + uuid('role_uuid'), + uuid('permission_uuid').optional({ nullable: false, values: 'falsy' }), + varChar('roleName').optional({ nullable: false, values: 'falsy' }) ], (req, res, next) => payloadExpressValidator(req, res, next, config), (req, res, next) => getRolesHasPermissionsController(req, res, next, config), @@ -715,13 +716,13 @@ export default(config) => { ); /** - * @name GET/roles_has_permissions/:uuid + * @name GET/roles/:role_uuid/permissions/:permission_uuid' * @function * @inner - * @memberof placeRouter - * @route GET /roles_has_permissions/{uuid} + * @memberof deviceRouter + * @route GET /roles/:role_uuid/permissions/:permission_uuid * @group Roles Permissions - Operations about roles permissions - * @param {string} uuid.path.required - The unique identifier for the role permission + * @param {string} uuid.path.optional - The unique identifier for the role permission * @param {string} fk_role.path.required - The unique identifier for the role * @param {string} fk_permission.path.required - The unique identifier for the permission * @returns {SuccessResponse} 200 - The role permission object @@ -731,26 +732,27 @@ export default(config) => { * @returns {ErrorResponse} 403 - Forbidden */ routes.get( - '/roles_has_permissions/:uuid', + '/roles/:role_uuid/permissions/:permission_uuid', (req, res, next) => authenticateToken(req, res, next, config), - (req, res, next) => authorizePermission('/roles_has_permissions/:uuid')(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions/:permission_uuid')(req, res, next, config), [ - uuid('uuid'), - uuid('fk_role').optional({ nullable: false, values: 'falsy' }), - uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) + uuid('uuid').optional({nullable:false, values:'falsy'}), + uuid('role_uuid'), + uuid('permission_uuid'), + varChar('roleName').optional({ nullable: false, values: 'falsy' }) ], (req, res, next) => payloadExpressValidator(req, res, next, config), - (req, res, next) => getRolesHasPermissionsByUuidController(req, res, next, config), + (req, res, next) => getRolesHasPermissionsController(req, res, next, config), (result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes), (result, req, res, _) => sendOkResponse(result, req, res) ); /** - * @name POST/roles_has_permissions + * @name POST/roles/:role_uuid/permissions * @function * @inner - * @memberof placeRouter - * @route POST /roles_has_permissions + * @memberof deviceRouter + * @route POST /roles/:role_uuid/permissions' * @group Roles Permissions - Operations about roles permissions * @param {string} fk_role.path.required - The unique identifier for the role * @param {string} fk_permission.path.required - The unique identifier for the permission @@ -762,12 +764,12 @@ export default(config) => { * @returns {ErrorResponse} 403 - Forbidden */ routes.post( - '/roles_has_permissions', + '/roles/:role_uuid/permissions', (req, res, next) => authenticateToken(req, res, next, config), - (req, res, next) => authorizePermission('/roles_has_permissions')(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions')(req, res, next, config), [ - uuid('fk_role'), - uuid('fk_permission') + uuid('role_uuid'), + uuid('permission_uuid') ], (req, res, next) => payloadExpressValidator(req, res, next, config), (req, res, next) => postRolesHasPermissionsController(req, res, next, config), @@ -776,13 +778,12 @@ export default(config) => { ); /** - * @name PUT/roles_has_permissions/:uuid + * @name PUT/roles/:role_uuid/permissions/:permission_uuid' * @function * @inner - * @memberof placeRouter - * @route PUT /roles_has_permissions/{uuid} + * @memberof deviceRouter + * @route PUT /roles/:role_uuid/permissions/:permission_uuid' * @group Roles Permissions - Operations about roles permissions - * @param {string} uuid.path.required - The unique identifier for the role permission * @param {string} fk_role.path.required - The unique identifier for the role * @param {string} fk_permission.path.required - The unique identifier for the permission * @returns {SuccessResponse} 200 - Role permission updated successfully @@ -793,13 +794,14 @@ export default(config) => { * @returns {ErrorResponse} 403 - Forbidden */ routes.put( - '/roles_has_permissions/:uuid', + '/roles/:role_uuid/permissions/:permission_uuid', (req, res, next) => authenticateToken(req, res, next, config), - (req, res, next) => authorizePermission('/roles_has_permissions/:uuid')(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions/:permission_uuid')(req, res, next, config), [ - uuid('uuid'), - uuid('fk_role').optional({ nullable: false, values: 'falsy' }), - uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) + uuid('role_uuid'), + uuid('permission_uuid'), + uuid('new_role_uuid').optional({ nullable: false, values: 'falsy' }), + uuid('new_permission_uuid').optional({ nullable: false, values: 'falsy' }) ], (req, res, next) => payloadExpressValidator(req, res, next, config), (req, res, next) => putRolesHasPermissionsController(req, res, next, config), @@ -808,11 +810,11 @@ export default(config) => { ); /** - * @name DELETE/roles_has_permissions/:uuid + * @name DELETE/roles/:role_uuid/permissions * @function * @inner - * @memberof placeRouter - * @route DELETE /roles_has_permissions/{uuid} + * @memberof deviceRouter + * @route DELETE /roles/:role_uuid/permissions * @group Roles Permissions - Operations about roles permissions * @param {string} uuid.path.required - The unique identifier for the role permission * @param {string} fk_role.path.required - The unique identifier for the role @@ -824,11 +826,41 @@ export default(config) => { * @returns {ErrorResponse} 403 - Forbidden */ routes.delete( - '/roles_has_permissions/:uuid', + '/roles/:role_uuid/permissions', (req, res, next) => authenticateToken(req, res, next, config), - (req, res, next) => authorizePermission('/roles_has_permissions/:uuid')(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions')(req, res, next, config), [ - uuid('uuid') + uuid('role_uuid') + ], + (req, res, next) => payloadExpressValidator(req, res, next, config), + (req, res, next) => softDeleteRolesHasPermissionsController(req, res, next, config), + (result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes), + (result, req, res, _) => sendResponseNoContent(result, req, res) + ); + + /** + * @name DELETE/roles/:role_uuid/permissions/permission_uuid + * @function + * @inner + * @memberof deviceRouter + * @route DELETE /roles/:role_uuid/permissions/permission_uuid + * @group Roles Permissions - Operations about roles permissions + * @param {string} uuid.path.required - The unique identifier for the role permission + * @param {string} fk_role.path.required - The unique identifier for the role + * @param {string} fk_permission.path.required - The unique identifier for the permission + * @returns {SuccessResponse} 200 - Role permission deleted successfully. No content + * @returns {ErrorResponse} 404 - Role permission not found + * @returns {ErrorResponse} 422 - Unprocessable entity + * @returns {ErrorResponse} 500 - Internal server error + * @returns {ErrorResponse} 403 - Forbidden + */ + routes.delete( + '/roles/:role_uuid/permissions/permission_uuid', + (req, res, next) => authenticateToken(req, res, next, config), + (req, res, next) => authorizePermission('/roles/:role_uuid/permissions/permission_uuid')(req, res, next, config), + [ + uuid('role_uuid'), + uuid('permission_uuid') ], (req, res, next) => payloadExpressValidator(req, res, next, config), (req, res, next) => softDeleteRolesHasPermissionsController(req, res, next, config),