Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | 1x 1x 1x 1x 1x 1x 1x 1x | 'use strict'; const logger = require('../../services/logger'); module.exports = function(Accesscontrol) { Accesscontrol.getOperationsTable = async(cb) => { try { let groups = await Accesscontrol.app.models.operationGroup.find({ include: { accessControls: 'role' } }); const roles = await Accesscontrol.app.models.Role.find(); groups = groups.map(element => element.toJSON()); let operations = []; groups.forEach(function(group) { roles.forEach(function(role) { let checked = false; group.accessControls.forEach(function(element) { if (element.role.name === role.name) checked = true; }); const operationCheck = {}; operationCheck.id = group.id; operationCheck.name = group.Name; operationCheck.role = role.name; operationCheck.checked = checked; operations.push(operationCheck); }); }); return cb(null, operations, roles); } catch (e) { logger.debug(`Error getting authorization data, ${e}`); return cb(null); } }; Accesscontrol.remoteMethod('getOperationsTable', { http: {verb: 'get'}, returns: [{ arg: 'groups', type: 'array' }, { arg: 'roles', type: 'object' } ] }); Accesscontrol.savePermissions = (data, cb) => { try { Accesscontrol.app.dataSources.db.transaction(async models => { for (const operation of data) { const role = await models.Role.findOne({ where: { name: operation.role } }); const accessControl = await models.accessControl.findOne({ where: { GroupId: operation.id, RoleId: role.id } }); if (operation.checked) { if (!accessControl) { await models.accessControl.create({ RoleId: role.id, GroupId: operation.id }); } } else { if (accessControl) { await models.accessControl.destroyById(accessControl.id); } } } return cb(null, true); }); } catch(e) { logger.debug(`Error saving permissions: ${e}`); return cb(null, false); } }; Accesscontrol.remoteMethod('savePermissions', { http: {verb: 'post'}, accepts: { arg: 'data', type: 'array' }, returns: { arg: 'response', type: 'boolean', root: true } }); Accesscontrol.getPermissions = async function(userId) { try { let roleMappings = await Accesscontrol.app.models.RoleMapping.find({ where: { principalId: userId } }); roleMappings =roleMappings.map(r => r.roleId); const roles = await Accesscontrol.app.models.Role.find({ where: { id: {inq: roleMappings} } }); let permissions = []; for (const role of roles) { const accessControls = await Accesscontrol.find({ include: 'operationGroup' , where: { RoleId: role.id } }); for (const access of accessControls) { if (access && access.toJSON().operationGroup) permissions.push(access.toJSON().operationGroup.Name); } } return permissions; } catch (e) { logger.debug(`Error getting authorization data, ${e}`); return null; } }; Accesscontrol.remoteMethod('getPermissions', { http: { verb: 'get' }, accepts: { arg: 'userId', type: 'number', required: true }, returns: { arg: 'response', type: 'object', root: true } }); }; |