fixed roles_has_permission to use better nomenclature

This commit is contained in:
Pau 2025-04-15 19:29:49 +02:00
parent 082f7a7002
commit b6351f5f1e
4 changed files with 107 additions and 73 deletions

View File

@ -15,7 +15,7 @@ const getRolesHasPermissionsController = (req, res, next, config) => {
const conn = mysql.start(config) const conn = mysql.start(config)
const uuidList = req.query.uuidList && req.query.uuidList.split(',') const uuidList = req.query.uuidList && req.query.uuidList.split(',')
Promise.all([ Promise.all([
getRolesHasPermissionsModel({...req.query, uuidList, conn}), getRolesHasPermissionsModel({...req.query, ...req.params, uuidList, conn}),
countRolesHasPermissionsModel({...req.query, uuidList, conn}) countRolesHasPermissionsModel({...req.query, uuidList, conn})
]) ])
.then(([getResults, countResults]) => { .then(([getResults, countResults]) => {
@ -68,7 +68,7 @@ const postRolesHasPermissionsController = (req, res, next, config) => {
const conn = mysql.start(config) const conn = mysql.start(config)
const createdBy = req.auth.user || null const createdBy = req.auth.user || null
insertRolesHasPermissionsModel({...req.body, createdBy, conn}) insertRolesHasPermissionsModel({...req.body, ...req.params, createdBy, conn})
.then((roles_has_permissions) => { .then((roles_has_permissions) => {
const result = { const result = {
_data: roles_has_permissions _data: roles_has_permissions
@ -86,11 +86,10 @@ const postRolesHasPermissionsController = (req, res, next, config) => {
const putRolesHasPermissionsController = (req, res, next, config) => { const putRolesHasPermissionsController = (req, res, next, config) => {
const conn = mysql.start(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) => { .then((roles_has_permissions) => {
if (noResults(roles_has_permissions)) { if (noResults(response)) {
const err = error404() const err = error404()
const error = errorHandler(err, config.environment) const error = errorHandler(err, config.environment)
return sendResponseNotFound(res, error) return sendResponseNotFound(res, error)
@ -111,11 +110,10 @@ const putRolesHasPermissionsController = (req, res, next, config) => {
const softDeleteRolesHasPermissionsController = (req, res, next, config) => { const softDeleteRolesHasPermissionsController = (req, res, next, config) => {
const conn = mysql.start(config) const conn = mysql.start(config)
const uuid = req.params.uuid
const { deleted } = req.body const { deleted } = req.body
const deletedby = req.auth.user || null const deletedby = req.auth.user || null
softDeleteRolesHasPermissionsModel({ uuid, deleted, deletedby, conn }) softDeleteRolesHasPermissionsModel({ ...req.params, deleted, deletedby, conn })
.then(() => { .then(() => {
const result = {} const result = {}
next(result) next(result)

View File

@ -8,6 +8,7 @@ import {
softDeleteRolesHasPermissionsQuery, softDeleteRolesHasPermissionsQuery,
modifyRolesHasPermissionsQuery modifyRolesHasPermissionsQuery
} from '../../repositories/authorization/roles_has_permissionsRepository.js' } from '../../repositories/authorization/roles_has_permissionsRepository.js'
import { error404 } from '../../utils/errors.js'
const getRolesHasPermissionsModel = ({conn, ...rest}) => { const getRolesHasPermissionsModel = ({conn, ...rest}) => {
const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss') const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss')
@ -15,7 +16,7 @@ const getRolesHasPermissionsModel = ({conn, ...rest}) => {
return mysql return mysql
.execute(getRolesHasPermissionsQuery(paramsToSearch), conn, paramsToSearch) .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}) => { const countRolesHasPermissionsModel = ({conn, ...rest}) => {
@ -34,7 +35,7 @@ const insertRolesHasPermissionsModel = ({conn, ...rest}) => {
return mysql return mysql
.execute(insertRolesHasPermissionsQuery(paramsToInsert), conn, paramsToInsert) .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}) => { const modifyRolesHasPermissionsModel = ({conn, ...params}) => {

View File

@ -1,10 +1,10 @@
import { pagination } from '../../utils/pagination.js' 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 uuidCondition = uuid ? 'AND r.uuid = :uuid' : '';
const roleNameCondition = roleName ? 'AND fk_role = (SELECT id from dbmaster.roles WHERE name = :roleName)' : ''; const roleUuidCondition = role_uuid ? 'AND fk_role = (SELECT id from mydb.roles WHERE uuid = :role_uuid)' : '';
const roleUuidCondition = fk_role ? 'AND fk_role = (SELECT id from dbmaster.roles WHERE uuid = :fk_role)' : ''; const roleNameCondition = roleName ? 'AND fk_role = (SELECT id from mydb.roles WHERE name = :roleName)' : '';
const permissionsUuidCondition = fk_permission ? 'AND fk_permission = (SELECT id from dbmaster.permissions WHERE uuid = :fk_permission)' : ''; const permissionsUuidCondition = permission_uuid ? 'AND fk_permission = (SELECT id from mydb.permissions WHERE uuid = :permission_uuid)' : '';
return ` return `
SELECT SELECT
${count || ${count ||
@ -15,13 +15,13 @@ const _rolesHasPermissionsQuery = (_pagination = '') => ({count}) => ({uuid, fk_
p.uuid as permission_uuid, p.uuid as permission_uuid,
p.fk_endpoint as permission_endpoint`} p.fk_endpoint as permission_endpoint`}
FROM FROM
dbmaster.roles_has_permissions as r mydb.roles_has_permissions as r
JOIN 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.created <= :now
AND (r2.deleted > :now OR r2.deleted IS NULL) AND (r2.deleted > :now OR r2.deleted IS NULL)
JOIN 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.created <= :now
AND (p.deleted > :now OR p.deleted IS NULL) AND (p.deleted > :now OR p.deleted IS NULL)
WHERE WHERE
@ -45,7 +45,7 @@ const countRolesHasPermissionsQuery = rest =>
const insertRolesHasPermissionsQuery = () => { const insertRolesHasPermissionsQuery = () => {
return ` return `
INSERT INTO dbmaster.roles_has_permissions ( INSERT INTO mydb.roles_has_permissions (
uuid, uuid,
fk_role, fk_role,
fk_permission, fk_permission,
@ -54,48 +54,51 @@ const insertRolesHasPermissionsQuery = () => {
) )
VALUES ( VALUES (
:uuid, :uuid,
(SELECT id FROM dbmaster.roles WHERE uuid = :fk_role), (SELECT id FROM mydb.roles WHERE uuid = :role_uuid),
(SELECT id FROM dbmaster.permissions WHERE uuid = :fk_permission), (SELECT id FROM mydb.permissions WHERE uuid = :permission_uuid),
:now, :now,
:createdBy :createdBy
); );
SELECT dbmaster.permissions.*, SELECT permissions.*,
permissions.uuid as permission_uuid, permissions.uuid as permission_uuid,
roles.uuid as role_uuid, roles.uuid as role_uuid,
roles.name as role_name roles.name as role_name
FROM dbmaster.roles_has_permissions as rp FROM mydb.roles_has_permissions as rp
LEFT JOIN dbmaster.permissions as permissions ON rp.fk_permission = permissions.id LEFT JOIN mydb.permissions as permissions ON rp.fk_permission = permissions.id
LEFT JOIN dbmaster.roles as roles ON rp.fk_role = roles.id LEFT JOIN mydb.roles as roles ON rp.fk_role = roles.id
WHERE rp.uuid = :uuid; WHERE rp.uuid = :uuid;
` `
} }
const modifyRolesHasPermissionsQuery = (roleUuid, permissionUuid) => { const modifyRolesHasPermissionsQuery = (new_role_uuid, new_permission_uuid) => {
const roleUuidCondition = roleUuid ? 'fk_role = (SELECT id from dbmaster.roles WHERE uuid = :fk_role),' : ''; const roleUuidCondition = new_role_uuid ? 'fk_role = (SELECT id from mydb.roles WHERE uuid = :new_role_uuid),' : '';
const permissionUuidCondition = permissionUuid ? 'fk_permission = (SELECT id from dbmaster.permissions WHERE uuid = :fk_permission),' : ''; const permissionUuidCondition = new_permission_uuid ? 'fk_permission = (SELECT id from mydb.permissions WHERE uuid = :new_permission_uuid),' : '';
return ` return `
UPDATE UPDATE
dbmaster.roles_has_permissions as roles_has_permissions mydb.roles_has_permissions as roles_has_permissions
SET SET
${roleUuidCondition} ${roleUuidCondition}
${permissionUuidCondition} ${permissionUuidCondition}
uuid = :uuid uuid = :uuid
WHERE 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 AND
roles_has_permissions.deleted IS NULL; 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 ` return `
UPDATE UPDATE
dbmaster.roles_has_permissions as roles_has_permissions mydb.roles_has_permissions as roles_has_permissions
SET SET
deleted = :deleted, deletedBy = :deletedBy deleted = :deleted, deletedBy = :deletedBy
WHERE WHERE
roles_has_permissions.uuid = :uuid roles_has_permissions.fk_role = (SELECT id from mydb.roles WHERE uuid = :role_uuid)
${permissionUuidCondition}
AND AND
roles_has_permissions.deleted IS NULL roles_has_permissions.deleted IS NULL
` `

View File

@ -684,15 +684,15 @@ export default(config) => {
//roles_has_permissions routes //roles_has_permissions routes
/** /**
* @name GET/roles_has_permissions * @name GET/roles/:role_uuid/permissions
* @function * @function
* @inner * @inner
* @memberof placeRouter * @memberof deviceRouter
* @route GET /roles_has_permissions * @route GET /roles/:role_uuid/permissions
* @group Roles Permissions - Operations about roles 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_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 {SuccessResponse} 200 - The role permission object
* @returns {ErrorResponse} 404 - Role permission not found * @returns {ErrorResponse} 404 - Role permission not found
* @returns {ErrorResponse} 422 - Unprocessable entity * @returns {ErrorResponse} 422 - Unprocessable entity
@ -700,13 +700,14 @@ export default(config) => {
* @returns {ErrorResponse} 403 - Forbidden * @returns {ErrorResponse} 403 - Forbidden
*/ */
routes.get( routes.get(
'/roles_has_permissions', '/roles/:role_uuid/permissions',
(req, res, next) => authenticateToken(req, res, next, config), (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('uuid').optional({ nullable: false, values: 'falsy' }),
uuid('fk_role').optional({ nullable: false, values: 'falsy' }), uuid('role_uuid'),
uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) 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) => payloadExpressValidator(req, res, next, config),
(req, res, next) => getRolesHasPermissionsController(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 * @function
* @inner * @inner
* @memberof placeRouter * @memberof deviceRouter
* @route GET /roles_has_permissions/{uuid} * @route GET /roles/:role_uuid/permissions/:permission_uuid
* @group Roles Permissions - Operations about roles 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_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.required - The unique identifier for the permission
* @returns {SuccessResponse} 200 - The role permission object * @returns {SuccessResponse} 200 - The role permission object
@ -731,26 +732,27 @@ export default(config) => {
* @returns {ErrorResponse} 403 - Forbidden * @returns {ErrorResponse} 403 - Forbidden
*/ */
routes.get( routes.get(
'/roles_has_permissions/:uuid', '/roles/:role_uuid/permissions/:permission_uuid',
(req, res, next) => authenticateToken(req, res, next, config), (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('uuid').optional({nullable:false, values:'falsy'}),
uuid('fk_role').optional({ nullable: false, values: 'falsy' }), uuid('role_uuid'),
uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) uuid('permission_uuid'),
varChar('roleName').optional({ nullable: false, values: 'falsy' })
], ],
(req, res, next) => payloadExpressValidator(req, res, next, config), (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, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
(result, req, res, _) => sendOkResponse(result, req, res) (result, req, res, _) => sendOkResponse(result, req, res)
); );
/** /**
* @name POST/roles_has_permissions * @name POST/roles/:role_uuid/permissions
* @function * @function
* @inner * @inner
* @memberof placeRouter * @memberof deviceRouter
* @route POST /roles_has_permissions * @route POST /roles/:role_uuid/permissions'
* @group Roles Permissions - Operations about roles permissions * @group Roles Permissions - Operations about roles permissions
* @param {string} fk_role.path.required - The unique identifier for the role * @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.required - The unique identifier for the permission
@ -762,12 +764,12 @@ export default(config) => {
* @returns {ErrorResponse} 403 - Forbidden * @returns {ErrorResponse} 403 - Forbidden
*/ */
routes.post( routes.post(
'/roles_has_permissions', '/roles/:role_uuid/permissions',
(req, res, next) => authenticateToken(req, res, next, config), (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('role_uuid'),
uuid('fk_permission') uuid('permission_uuid')
], ],
(req, res, next) => payloadExpressValidator(req, res, next, config), (req, res, next) => payloadExpressValidator(req, res, next, config),
(req, res, next) => postRolesHasPermissionsController(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 * @function
* @inner * @inner
* @memberof placeRouter * @memberof deviceRouter
* @route PUT /roles_has_permissions/{uuid} * @route PUT /roles/:role_uuid/permissions/:permission_uuid'
* @group Roles Permissions - Operations about roles 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 * @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.required - The unique identifier for the permission
* @returns {SuccessResponse} 200 - Role permission updated successfully * @returns {SuccessResponse} 200 - Role permission updated successfully
@ -793,13 +794,14 @@ export default(config) => {
* @returns {ErrorResponse} 403 - Forbidden * @returns {ErrorResponse} 403 - Forbidden
*/ */
routes.put( routes.put(
'/roles_has_permissions/:uuid', '/roles/:role_uuid/permissions/:permission_uuid',
(req, res, next) => authenticateToken(req, res, next, config), (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('role_uuid'),
uuid('fk_role').optional({ nullable: false, values: 'falsy' }), uuid('permission_uuid'),
uuid('fk_permission').optional({ nullable: false, values: 'falsy' }) 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) => payloadExpressValidator(req, res, next, config),
(req, res, next) => putRolesHasPermissionsController(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 * @function
* @inner * @inner
* @memberof placeRouter * @memberof deviceRouter
* @route DELETE /roles_has_permissions/{uuid} * @route DELETE /roles/:role_uuid/permissions
* @group Roles Permissions - Operations about roles permissions * @group Roles Permissions - Operations about roles permissions
* @param {string} uuid.path.required - The unique identifier for the role permission * @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_role.path.required - The unique identifier for the role
@ -824,11 +826,41 @@ export default(config) => {
* @returns {ErrorResponse} 403 - Forbidden * @returns {ErrorResponse} 403 - Forbidden
*/ */
routes.delete( routes.delete(
'/roles_has_permissions/:uuid', '/roles/:role_uuid/permissions',
(req, res, next) => authenticateToken(req, res, next, config), (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) => payloadExpressValidator(req, res, next, config),
(req, res, next) => softDeleteRolesHasPermissionsController(req, res, next, config), (req, res, next) => softDeleteRolesHasPermissionsController(req, res, next, config),