From 3d2b18863b1726e4ebec6758e3536a02602c1eaf Mon Sep 17 00:00:00 2001 From: Nevil Date: Thu, 28 Mar 2024 13:40:40 +0530 Subject: [PATCH] added user session permissions --- .../20240326060604-session-permissions.js | 48 ++++++ ...20240326060605-session-role-permissions.js | 139 ++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 src/database/migrations/20240326060604-session-permissions.js create mode 100644 src/database/migrations/20240326060605-session-role-permissions.js diff --git a/src/database/migrations/20240326060604-session-permissions.js b/src/database/migrations/20240326060604-session-permissions.js new file mode 100644 index 000000000..a6f3df195 --- /dev/null +++ b/src/database/migrations/20240326060604-session-permissions.js @@ -0,0 +1,48 @@ +'use strict' + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + try { + const permissionsData = [ + { + code: 'get_user_sessions', + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + status: 'ACTIVE', + }, + { + code: 'validate_user_sessions', + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + status: 'ACTIVE', + }, + ] + + // Batch insert permissions + await queryInterface.bulkInsert( + 'permissions', + permissionsData.map((permission) => ({ + ...permission, + created_at: new Date(), + updated_at: new Date(), + })) + ) + } catch (error) { + console.error('Error in migration:', error) + throw error + } + }, + + async down(queryInterface, Sequelize) { + try { + // Rollback migration by deleting all permissions + await queryInterface.bulkDelete('permissions', null, {}) + } catch (error) { + console.error('Error in rollback migration:', error) + throw error + } + }, +} diff --git a/src/database/migrations/20240326060605-session-role-permissions.js b/src/database/migrations/20240326060605-session-role-permissions.js new file mode 100644 index 000000000..f86db8dd8 --- /dev/null +++ b/src/database/migrations/20240326060605-session-role-permissions.js @@ -0,0 +1,139 @@ +'use strict' + +require('module-alias/register') +require('dotenv').config() +const common = require('@constants/common') +const Permissions = require('@database/models/index').Permission + +const getPermissionId = async (module, request_type, api_path) => { + try { + const permission = await Permissions.findOne({ + where: { module, request_type, api_path }, + }) + if (!permission) { + throw new Error( + `Permission not found for module: ${module}, request_type: ${request_type}, api_path: ${api_path}` + ) + } + return permission.id + } catch (error) { + throw new Error(`Error while fetching permission: ${error.message}`) + } +} + +module.exports = { + up: async (queryInterface, Sequelize) => { + try { + const rolePermissionsData = await Promise.all([ + { + role_title: common.MENTOR_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + { + role_title: common.ORG_ADMIN_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + { + role_title: common.USER_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + { + role_title: common.ADMIN_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + { + role_title: common.SESSION_MANAGER_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + { + role_title: common.MENTEE_ROLE, + permission_id: await getPermissionId('account', ['GET'], '/user/v1/account/sessions'), + module: 'account', + request_type: ['GET'], + api_path: '/user/v1/account/sessions', + }, + + { + role_title: common.MENTOR_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + { + role_title: common.MENTEE_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + { + role_title: common.ORG_ADMIN_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + { + role_title: common.USER_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + { + role_title: common.ADMIN_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + { + role_title: common.SESSION_MANAGER_ROLE, + permission_id: await getPermissionId('account', ['POST'], '/user/v1/account/validateUserSession'), + module: 'account', + request_type: ['POST'], + api_path: '/user/v1/account/validateUserSession', + }, + ]) + + await queryInterface.bulkInsert( + 'role_permission_mapping', + rolePermissionsData.map((data) => ({ + ...data, + created_at: new Date(), + updated_at: new Date(), + created_by: 0, + })) + ) + } catch (error) { + console.log(error) + console.error(`Migration error: ${error.message}`) + throw error + } + }, + + down: async (queryInterface, Sequelize) => { + try { + await queryInterface.bulkDelete('role_permission_mapping', null, {}) + } catch (error) { + console.error(`Rollback migration error: ${error.message}`) + throw error + } + }, +}