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 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)

View File

@ -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}) => {

View File

@ -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
`

View File

@ -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),