import AuthStore, { persistor } from './../authenticate/auth.store'; import AuthService from '../services/auth.service'; import _ from 'lodash'; const PermissionStackUtil = { /** * Get current user permission from API * @param {*} loadPermission * @returns */ getPermissions: async(loadPermission) => { let permissionStack = {}; if (loadPermission) { permissionStack = await PermissionStackUtil.getAPIBasedPermission(); //Use this code if API role permission is not ready for demo /* let user = Auth.getUser(); user = user?user.name:""; if (user === 'scientist' ) { permissionStack['project'] = {create: true, edit: false, delete: true}; permissionStack['scheduleunit'] = {create: true, edit: false, delete: true, createsub: false, autodeletion:false, copysu:false, excelview:true, cleanuptask:false, cancelsu:false, viewworkflow:true,dataproduct: true,}; } else if (user === 'operator' ) { permissionStack['project'] = {create: true, edit: false, delete: false}; permissionStack['scheduleunit'] = {create: true, edit: false, delete: false, createsub: false, autodeletion:true, copysu:true, excelview:false, cleanuptask:true, cancelsu:false, viewworkflow:true,dataproduct: false,}; } else { permissionStack['project'] = {create: true, edit: false, delete: true}; permissionStack['scheduleunit'] = {create: true, edit: false, delete: true, createsub: false, autodeletion:false, copysu:false, excelview:true, cleanuptask:false, cancelsu:false, viewworkflow:true,dataproduct: true,}; } */ } AuthStore.dispatch({ type: 'loadpermission', payload: permissionStack}); return permissionStack; }, async getAPIBasedPermission() { let permissionStack = {}; const module_url = { project: 'project', scheduleunit_draft: 'scheduling_unit_draft', scheduleunit_blueprint: 'scheduling_unit_blueprint', scheduling_set: 'scheduling_set', cycle: 'cycle', task_draft: 'task_draft', task_blueprint: 'task_blueprint', reservation: 'reservation', task_relation_draft: 'task_relation_draft', task_relation_blueprint: 'task_relation_blueprint', dynamicScheduler: 'setting/dynamic_scheduling_enabled' } const modules = Object.keys(module_url); for(const module of modules) { const url = module_url[module]; const allowedPermission = await AuthService.getAccessControlMethod(url); if (allowedPermission) { if (module === 'project') { permissionStack[module] ={ list: allowedPermission?(_.includes(allowedPermission, 'GET')):false, create: allowedPermission?(_.includes(allowedPermission, 'PUT')):false, edit: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, delete: allowedPermission?(_.includes(allowedPermission, 'DELETE')):false}; } else if(module === 'scheduleunit_draft' || module === 'scheduleunit_blueprint') { let getAccesss = allowedPermission?(_.includes(allowedPermission, 'GET')):false; let putAccesss = allowedPermission?(_.includes(allowedPermission, 'PUT')):false; let patchAccess = allowedPermission?(_.includes(allowedPermission, 'PATCH')):false; let deleteAccess = allowedPermission?(_.includes(allowedPermission, 'DELETE')):false; let postAccess = allowedPermission?(_.includes(allowedPermission, 'POST')):false; permissionStack['scheduleunit'] ={ create: putAccesss, edit: patchAccess, delete: deleteAccess, list: getAccesss, createsub: putAccesss, autodeletion:patchAccess, copysu:putAccesss, excelview:getAccesss, cleanuptask:true, cancelsu:true, viewworkflow:true, create_rerun: true, update_sub: true }; permissionStack[module] = { create: putAccesss, edit: patchAccess, delete: deleteAccess, list: getAccesss, add: postAccess } } else if(module === 'task_relation_draft') { permissionStack['scheduleunit'].dataproduct = allowedPermission?(_.includes(allowedPermission, 'POST')):false; } else if(module === 'task_relation_blueprint') { permissionStack['scheduleunit_blueprint'].dataproduct = allowedPermission?(_.includes(allowedPermission, 'POST')):false; } else if (module === 'scheduling_set') { permissionStack['scheduleunit_draft']['scheduling_set'] = allowedPermission?(_.includes(allowedPermission, 'POST')):false; } else if(module === 'cycle') { permissionStack[module] ={ list: allowedPermission?(_.includes(allowedPermission, 'GET')):false, create: allowedPermission?(_.includes(allowedPermission, 'PUT')):false, edit: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, delete: allowedPermission?(_.includes(allowedPermission, 'DELETE')):false}; } else if(module === 'task_draft' || module === 'task_blueprint'){ permissionStack['task'] ={ list: allowedPermission?(_.includes(allowedPermission, 'GET')):false, edit: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, delete: allowedPermission?(_.includes(allowedPermission, 'DELETE')):false, } permissionStack[module] = { canceltask: allowedPermission?(_.includes(allowedPermission, 'POST')):false }; } else if(module === 'reservation') { let getAccesss = allowedPermission?(_.includes(allowedPermission, 'GET')):false; let postAccess = allowedPermission?(_.includes(allowedPermission, 'POST')):false; permissionStack['timeline'] = { addreservation: postAccess, listreservation: getAccesss }; permissionStack['weekoverview'] = { addreservation: postAccess, listreservation: getAccesss }; permissionStack['reservation'] = { create: postAccess, list: getAccesss, edit: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, delete: allowedPermission?(_.includes(allowedPermission, 'DELETE')):false }; } else if (module === 'dynamicScheduler') { permissionStack[module] = { setting: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, }; } } } permissionStack['workflow'] = { 'qa_reporting_to': true, 'qa_reporting_sos':true, 'pi_verification':true, 'decide_acceptance':true, 'unpin_data':true, }; return permissionStack; }, async getAccessByModuleAndId(module, id) { let permissionStack = {}; const url = module+'/'+id; const allowedPermission = await AuthService.getAccessControlMethod(url); permissionStack[module] = {} if(allowedPermission) { permissionStack[module][id] ={ view : allowedPermission?(_.includes(allowedPermission, 'GET')):false, edit : allowedPermission?(_.includes(allowedPermission, 'PUT')):false, delete : allowedPermission?(_.includes(allowedPermission, 'DELETE')):false, cancel : allowedPermission?(_.includes(allowedPermission, 'POST')):false } } AuthStore.dispatch({ type: 'loadpermissionbyid', payload: permissionStack, id: id, module: module}); return permissionStack[module]; }, async deleteStore() { await AuthStore.dispatch({type: 'deletestore', payload: { rolePermission: {}}}); return } } export default PermissionStackUtil;