mounts/priv/priv.js
/**
 * 
 * @param {String} claseUsuario 
 * @param {String} queryUsuario 
 * 
 * Realiza las querys a las vistas que tiene disponibles el usuario,
 * en funcion del metodo de privacidad que puede utilizar. Cada metodo de privacidad (cada regla) tiene una vista
 * 
 * Devuelve: un array de jsons con formato {privacy_method:____, resultados:____}
 */
@param {String} claseUsuario
@param {String} queryUsuario

Realiza las querys a las vistas que tiene disponibles el usuario,
en funcion del metodo de privacidad que puede utilizar. Cada metodo de privacidad (cada regla) tiene una vista


@param { String } claseUsuario @param { String } queryUsuario Realiza las querys a las vistas que tiene disponibles el usuario en funcion del metodo de privacidad que puede utilizar . Cada metodo de privacidad ( cada regla ) tiene una vista
async function querysAVistas(claseUsuario, queryUsuario) {
	var resultadoFinal = []
	var queryUsuarioArray = queryUsuario.split(' ')
	for (var i = 0; i < politics[claseUsuario].rules.length; i++) {
		if (politics[claseUsuario].rules[i].action_type == 'GET') {
			var indexFrom = queryUsuarioArray.indexOf('FROM')
			var columnasArray = []
			var nombreTablaString = ''
			var j = 0
			if (politics[claseUsuario].rules[i].viewColumns[0] == '*') {
				queryUsuarioArray[j] = queryUsuarioArray[j].replace(',', '')
				for (j = 1; j < indexFrom; j++) {
					columnasArray.push(queryUsuarioArray[j])
				}
				columnasArray.push('id')
			}
			else if (queryUsuarioArray[1] == '*') {
				columnasArray.push(queryUsuarioArray[1])
			}
			else {
				for (j = 1; j < indexFrom; j++) {
					queryUsuarioArray[j] = queryUsuarioArray[j].replace(',', '')
					politics[claseUsuario].rules[i].viewColumns.forEach((element) => {
						if (element == queryUsuarioArray[j]) {
							columnasArray.push(queryUsuarioArray[j])
						}
					})
				}
				columnasArray.push('id')
			}
			nombreTablaString = nombreTablaString + politics[claseUsuario].rules[i].viewName
			var allow = true
			if (columnasArray[0] == 'id') {
				allow = false
			}
			if (politics[claseUsuario].rules[i].privacy_method == 'Generalization' && columnasArray[0] != '*') {
				allow = false
			}
			if (allow) {
				console.log('querys que se mandan: ' + 'SELECT ' + columnasArray + ' FROM `' + nombreTablaString + '`')
				try {
					if (columnasArray[0] == '*') {
						var resultado = await con.query('SELECT * FROM ??', nombreTablaString)
					}
					else {
						var resultado = await con.query('SELECT ?? FROM ??', [ columnasArray, nombreTablaString ])
					}
				} catch (err) {
					console.log(err)
				}
				resultadoFinal.push({
					privacy_method : politics[claseUsuario].rules[i].privacy_method,
					datosSQL       : resultado
				})
			}
		}
	}
	return resultadoFinal
}
async function querysAVistas ( claseUsuario , queryUsuario ) { var resultadoFinal = [ ] var queryUsuarioArray = queryUsuario . split ( ' ' ) for ( var i = 0 ; i < politics [ claseUsuario ] . rules . length ; i ++ ) { if ( politics [ claseUsuario ] . rules [ i ] . action_type == 'GET' ) { var indexFrom = queryUsuarioArray . indexOf ( 'FROM' ) var columnasArray = [ ] var nombreTablaString = '' var j = 0 if ( politics [ claseUsuario ] . rules [ i ] . viewColumns [ 0 ] == '*' ) { queryUsuarioArray [ j ] = queryUsuarioArray [ j ] . replace ( ',' , '' ) for ( j = 1 ; j < indexFrom ; j ++ ) { columnasArray . push ( queryUsuarioArray [ j ] ) } columnasArray . push ( 'id' ) } else if ( queryUsuarioArray [ 1 ] == '*' ) { columnasArray . push ( queryUsuarioArray [ 1 ] ) } else { for ( j = 1 ; j < indexFrom ; j ++ ) { queryUsuarioArray [ j ] = queryUsuarioArray [ j ] . replace ( ',' , '' ) politics [ claseUsuario ] . rules [ i ] . viewColumns . forEach ( ( element ) => { if ( element == queryUsuarioArray [ j ] ) { columnasArray . push ( queryUsuarioArray [ j ] ) } } ) } columnasArray . push ( 'id' ) } nombreTablaString = nombreTablaString + politics [ claseUsuario ] . rules [ i ] . viewName var allow = true if ( columnasArray [ 0 ] == 'id' ) { allow = false } if ( politics [ claseUsuario ] . rules [ i ] . privacy_method == 'Generalization' && columnasArray [ 0 ] != '*' ) { allow = false } if ( allow ) { console . log ( 'querys que se mandan: ' + 'SELECT ' + columnasArray + ' FROM `' + nombreTablaString + '`' ) try { if ( columnasArray [ 0 ] == '*' ) { var resultado = await con . query ( 'SELECT * FROM ??' , nombreTablaString ) } else { var resultado = await con . query ( 'SELECT ?? FROM ??' , [ columnasArray , nombreTablaString ] ) } } catch ( err ) { console . log ( err ) } resultadoFinal . push ( { privacy_method : politics [ claseUsuario ] . rules [ i ] . privacy_method , datosSQL : resultado } ) } } } return resultadoFinal }
@param {String} claseUsuario
 @param {String} queryUsuario
@param { String } claseUsuario @param { String } queryUsuario
/**
	 * Vamos a dejar una vista por cada regla GET, y dentro de nuestro objeto regla introducimos un array
	 * de columnas que son las que se definen en esa regla.
	 * 
	 * A la hora de hacer las querys a las vistas, tenemos que controlas los * que representan a todas las columnas,
	 * tanto en el usuario como las que hay almacenadas en el campo reglas.columnas
	 */ //Por cada regla con GET //Monto la query //Hacemos cosas distintas en funcion de la posición de la query en la que estemos //Algunas partes de la string las guardamos en string distintas para poder evitar SQL injection // ----- SELECT ------ //queryString = queryString + queryUsuarioArray[0] + ' ' // ----- COLUMNAS ----- //Tenemos que escapar las columnas que vienen del usuario //Si en las reglas hay un *, dejamos la query del usuario //Primero quitamos la , que pueda quedar en la query del usuario //Si en las reglas hay un *, podemos dejar la query del usuario como esta añadiendole la columna id //Si en el usuario hay un *, podemos realizar esta query porque la vista esta filtrada ya //Si hay columnas en el usuario y en las reglas, tenemos que hacer la comparacion //Primero quitamos la , que pueda quedar en la query del usuario //Luego comparamos //Si coincide alguna columna, la ponemos dentro de la query //Añadimos id // ----- FROM ----- //queryString = queryString + queryUsuarioArray[indexFrom] + ' ' // ----- NOMBRE DE LA TABLA ----- //Hay que cambiarlo por el nombre de la vista // ----- WHERE Y CONDICIONES ----- //Vamos a quitar el where porque es copmlicado escaparlo //Lo dejamos igual // for (j = indexFrom + 3; j < queryUsuarioArray.length; j++) { // 	whereString = whereString + queryUsuarioArray[j] + ' ' // } //Realizamos varias comprobaciones //Si en columnas array solo esta id, no enviamos la query //Si es generalization y no es *, no enviamos la query