Perfil funcional para API REST

Hola gente, hoy escribo para consultar: ¿Existe alguna forma de determinar qué servicios web puede consumir cierto usuario?
Amplio: Resulta que utilizando el servidor_usuarios.ini podemos determinar los usuarios que pueden acceder a los recursos REST. El tema está en cómo restringir ciertos usuarios (el caso más práctico para ejemplificar sería: evitar que pueda hacer cualquier tipo de POST). ¿Me explico?
Se puede lograr esta suerte de perfil funcional para los servicios REST?

Econtré éste post, cuya respuesta me re sirvió.: http://foro.comunidad.siu.edu.ar/index.php?action=post;quote=76677;topic=17491.0

Continúo con una pregunta sobre lo expresado en la respuesta, pero en su post original.
Escribo esto por si alguien llega acá con la misma pregunta.

Hola Ramiro,

En ppio no, porque no hay una asociacion entre usuarios y servicios web.
Si tuvieras esa asociacion en algun lugar, podrias llegar a armar algo generando una subclase del proveedor_autorizacion (tal como encontraste en el post de Maxi).

Amplio: Resulta que utilizando el [b]servidor_usuarios.ini[/b] podemos determinar los usuarios que pueden acceder a los recursos REST. El tema está en cómo restringir ciertos usuarios (el caso más práctico para ejemplificar sería: evitar que pueda hacer cualquier tipo de POST). ¿Me explico?

Si lo que necesitas es restringir que haga una operacion puntual, necesitas mas que un perfil funcional… porque el usuario tiene acceso al recurso, el tema es que no puede acceder a todas las operaciones del recurso… no necesitas solo asociar ruta/usuario… sino que ademas debes tener las operaciones que puede solicitar.

Si hay subrecursos la cosa se complica un poco mas, tenes que extraer los parametros de lo que te llega sin romper la ruta en cuestion… porque vas a hacer la busqueda con ella.
Es mas a nivel de operacion casi el chequeo, donde hay que verificar si el usuario tiene derecho de uso o no.

Saludos

Richard, gracias por la respuesta.
Se nos ocurrió hacerlo de la siguiente forma; esencialmente declarando una clase que extienda \SIUToba\rest\seguridad\proveedor_autorizacion implementando el método tiene_acceso(abstracto, en la clase padre) .


<?php
public function tiene_acceso($usuario, $ruta){
    	$bool = true;

    	$username = $usuario->get_usuario();
    	$metodoreq = rest::request()->get_method();

    	$inst_path = toba::instancia()->get_path_instalacion_proyecto('<nombre_proyecto>');
    	$rest_path = $inst_path . "/rest";
    	
    	$data = parse_ini_file($rest_path."/usuarios_autorizaciones.ini", true);
    	if ($data !== false) {
    		if (!in_array($username, array_keys($data))) {
    			$bool = false;
    		} else {
    			if (!in_array( strtoupper($metodoreq), array_keys($data[$username]) )) {
    				$bool = false;
    			} else {
    				$bool = false;
    				foreach ($data[$username][strtoupper($metodoreq)] as $op) {
    					$pos = strpos($ruta, $op);
    					if ($pos !== false) {
    						$bool = true;
    						break;
    					}
    				}
    			}
    		}
    	}
    	$bool = ($ruta == 'api-docs')? true : $bool;
    	return $bool;
 }

El operador Hook del final es para poder utilizar la documentación por Swagger.

Así, implementamos “perfiles” mediante el archivo usuarios_autorizaciones.ini
Les dejo un ejemplo de su estructura:



[nombre_usuario]
GET[] = operacion1
GET[] = operacion2/suboperacion1
POST[] = operacion1


Edit: Notar que si la operación1 tiene varias suboperaciones, éstas estarán dentro de las funcionalidades autorizadas.