6014-executeRoutineMethod #1809
No reviewers
Labels
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: verdnatura/salix#1809
Loading…
Reference in New Issue
No description provided.
Delete Branch "6014-executeRoutineMethod"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -0,0 +83,4 @@
schema,
type: type.toUpperCase(),
name: routine,
host: process.env.NODE_ENV ? '' : '%',
He tingut que possar este if, pq en local quan done un grant de host posa '%' i no '' com en produccio.
Ns si sera tema de alguna configuracio de la base de datos local
He provat a possar els grants com developer@'' o
developer
@`` i res@ -0,0 +38,4 @@
}
});
Self.executeRoutine = async(ctx, routine, params, schema, type, options) => {
igual se li podria dir execute i jau aixina se queda la url mes curta i s'enten igual.
Applications/myRoutineName/execute
o
Applications/myRoutineName/executeRoutine
@ -0,0 +2,4 @@
module.exports = Self => {
Self.remoteMethodCtx('executeRoutine', {
description: 'Return the routes by worker',
Poner bien la descripcion
@ -0,0 +54,4 @@
if (typeof options == 'object')
Object.assign(myOptions, options);
const user = await models.VnUser.findById(userId, {
en vez de comprobar yo si tiene permiso o no. se puede llamar a account.user_hasRoutinePriv que ya te lo comprueba y mejor
@ -0,0 +1,100 @@
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethodCtx('executeRoutine', {
crear uno que siga call
un altre function
y un altre intern que tinga el codi comu dels dos
@ -0,0 +43,4 @@
const models = Self.app.models;
const isFunction = type == 'function';
params = params ?? [];
schema = schema ?? 'vn';
si no pasan esquema, no usar nada
Gastant user_hasRoutinePriv obliga a passar db
@ -0,0 +78,4 @@
const roles = inherits.map(inherit => inherit.inherits().name);
const canExecute = await models.ProcsPriv.findOne({
Revisar los permisos a nivel global, de esquema y específicos.
Carlosap va gastar user_hasRoutinePriv que ja ho fa, mira de gastar-ho.
@ -0,0 +92,4 @@
let argString = params.map(() => '?').join(',');
const query = `${caller} ${schema}.${routine}(${argString})`;
con concatenar valores que vienen del cliente en consultas sql.
usar el ??
Si posem directe el que ens pasen poden injectar codi
WIP: 6014-executeRoutineMethodto 6014-executeRoutineMethod@ -2355,0 +2355,4 @@
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `account`.`user_hasRoutinePriv`(vType ENUM('PROCEDURE', 'FUNCTION'),
El he tingut que afegir a la estructura
@ -0,0 +6,4 @@
const models = Self.app.models;
let caller = 'CALL';
params = params ?? [];
tota la part comu va en esta funcio.
La part de proc o de func en les respectives.
El resultat es que en esta funció no tindrás ningun if relatiu al tipo
@ -0,0 +11,4 @@
Object.assign(myOptions, options);
let [caller, chain] = query.split(' ');
if (!chain.includes('.')) chain = 'vn.' + chain;
quitar esquema por defecto
@ -0,0 +20,4 @@
if (!Object.values(canExecute)[0]) throw new UserError(`You don't have enough privileges`, 'ACCESS_DENIED');
let argString = params.map(() => '?').join(',');
const
@ -0,0 +18,4 @@
{
arg: 'schema',
type: 'string',
description: 'The routine schema',
required: true,
@ -0,0 +32,4 @@
});
Self.executeFunc = async(ctx, routine, params, schema, options) => {
if (schema)
quitar
@ -0,0 +10,4 @@
return {
req: {
accessToken: {userId},
headers: {origin: 'http://localhost'}
crear redmine para refactor