[SOLUCIONADO] Perfiles y restricciones

Hola, tengo el siguiente problema:

  1. Hay definidos perfiles funcionales que operan sin problema, llamemoslos perfil1, y perfil2

  2. Los permisos de perfil1 y perfil2 son idénticos, con la salvedad de alguna restricción funcional sobre perfil2 (hay varias pantallas que no puede ver).

  3. Dos usuarios, usuario1 (perfil1) y usuario2 (perfil2)

  4. Una tabla que define tipos de un dato, llamese tabla_tipos_datos
    4.1) estructura: id, nombre
    4.2) datos ya cargados: (1, tipo1), (2, tipo2)
    4.3) solo se modificará en condiciones extremas, y solo por el administrador de la base de datos, pero como eventualmente puede variar, se decidió hacerlo “dinámico”.

  5. Una tabla con los datos propiamente, llamese tabla_datos con la siguiente estructura:
    5.1) id, descripcion, id_tipo_dato

[b]El problema es de que forma definir lo siguiente, en forma general, y que provea el mayor dinamismo posible, asociado un posible cambio de la tabla de tipos de datos:

  • los usuarios de perfil1, e.g. usuario1, solo podrá ingresar/modificar o eliminar datos de tipo1.
  • los usuarios de perfil2, e.g. usuario2, solo podrá ingresar/modificar o eliminar datos de tipo2.[/b]

Es esto posible de representar?

Hola Martin,

sip eso es perfectamente factible, para ello usamos los perfiles de datos. Lo que deberias es al momento de definir el usuario relacionarle un perfil funcional y tambien un perfil de datos. Te dejo la doc sobre el tema y cualquier duda seguimos por aca.

http://desarrollos.siu.edu.ar/trac/toba/wiki/Referencia/Seguridad/PerfilesDatos

Saludos
Richard

Uhmmm. Me está faltando algo…
Te paso la definición de la dimensión… eso solamente fue lo que ingresé, ningún gatillo (¿?).
Luego cree el perfil, indicando que solo se pueda acceder al área DOCENTE.
Luego asigné este perfil de datos a un usuario.
Sin embargo, en el ABM de tipo de funciones, en el cuadro puedo ver las de otras áreas, y en el formulario, en el combo de selección de áreas, puedo seguir eligiendo y aceptando altas de otras funciones.

Sobre la tabla funciones_areas (id, nombre).
La restricción es para que en la tabla funciones_tipos (id, nombre, id_funcion_area).

Evidentemente debe faltarme algo, quizá referente a los gatillos, pero la verdad, no entendí el concepto.


Ah… como dato extra.
En la operación del ABM se accede al datos_tabla funciones_tipos, y el combo de las áreas se carga desde otro datos_tabla, funciones_areas.
Evidentemente me está faltando el filtro en algún lado, pero no se me ocurre como implementarlo de forma tal que afecte también al cuadro.

A mi me paso alguna vez, pero lo que me faltaba era agregar en la consulta, la linea que aplica al perfil
$sql = “xxxxxx”;
$sql = toba::perfil_de_datos()->filtrar($sql);
return toba::db(‘soporte’)->consultar($sql);

Espero te sirva

Prometía… pero por algo no funcionó. Te paso la extensión del datos tabla dt_funciones_areas, que es la tabla que debería filtrarse.


<?php
class dt_funciones_areas extends toba_datos_tabla
{
	/**
	 * Devuelve la lista a mostrar por los cuadros
	 */
	function get_listado($where)
	{
		$a_where = array();
		if (isset($where)) {
			$a_where[] = $where;
		}
		$sql = 'SELECT   	id, nombre
				FROM     	funciones_areas
				ORDER BY 	nombre
		';
		if (count($a_where) > 0) {
			$sql = sql_concatenar_where($sql, $a_where);
		}
		$sql = toba::perfil_de_datos()->filtrar($sql);
		return toba::db()->consultar($sql);
	}

	/**
	 * Devuelve una lista ordenada
	 * Se utiliza para cargar los combo de selección
	 */
	function get_descripciones()
	{
		$sql = 'SELECT 		id, nombre
				FROM 		funciones_areas
				ORDER BY 	nombre
		';
		$sql = toba::perfil_de_datos()->filtrar($sql);
		return toba::db()->consultar($sql);
	}
}
?>

Hola Martin,
creo que el detalle es justamente este… deberias incluir a la tabla como gatillo directo, de otra forma no va a filtrar correctamente el perfil de datos.

Saludos
Richard

Perfecto!! funcionó.
Solo tuve un percance intermedio ya que el cuadro no me filtraba las funciones.
Tuve que modificar la extensión del datos_tablas de funciones_tipos para incluir el código sugerido por Jhon.

Como la aplicación en la que trabajo es suceptible de este tipo de filtros, probablemente tome como “costumbre”, filtar según el perfil SIEMPRE antes de hacer una consulta (salvo que por vuestra sugerencia esto genere algún problema).

Asimismo, como vi en otro tema, sería más que interesante poder asociar más de un perfil de datos a cada usuario… solo pongo mi fichita en el buzon de sugerencias.

MIL GRACIAS a ambos!!