autenticacion api rest

Hola, estuve buscando en la documentación de la librería [1], pero no encuentro como expandir el tema de la autenticación a los servicios REST (con digest funciona bien). Lo que necesito es permitir accesos a ciertas rutas según el usuario. Estoy trabajando con un proyecto de Toba, no con la libreria standalone.

Saludos
Maxi

[1] https://github.com/SIU-Toba/rest/

Hola Maximiliano,

la libreria que usamos para servir rest tiene la posibilidad de que se le inyecten instancias de otras clases, con lo cual lo que podrias hacer es invocar lo siguiente y fijarle una instancia de la clase que quieras para que autentique.

 rest::app()->set_autenticador(new clase())

Dicha clase solo debe extender SIUToba\rest\seguridad\proveedor_autenticacion e implementar algun metodo que falte o difiera.

Lo que necesito es permitir accesos a ciertas rutas según el usuario. Estoy trabajando con un proyecto de Toba, no con la libreria standalone.

Lo que necesitas entonces es un autorizador, el usuario esta autenticado… luego vos debes decidir si puede o no acceder a un recurso puntual, el mecanismo es similar al que te expuse anteriormente pero tenes que extender de la clase proveedor_autorizacion.

De todas maneras tene en cuenta que los usuarios de la api rest no necesariamente van a coincidir con los de Toba, por lo tanto aplicar una especie de perfil funcional sobre eso, va a requerir info aparte.

Saludos

El archivo que extiende de proveedor_autorizacion, donde lo coloco? en la carpeta rest? lo agrego al autoload?

la linea de

rest::app()->set_autenticador(new proveedor_autorizacion_unlu());

la tengo que poner en proyecto/www/rest.php despues de instanciar el núcleo?

toba_nucleo::instancia()->acceso_rest();

Hola Maxi,

Tiene que ser parte del proyecto, con lo cual deberia terminar en el autoload del mismo o en el de composer.

la linea de ``` rest::app()->set_autenticador(new proveedor_autorizacion_unlu()); ```

la tengo que poner en proyecto/www/rest.php despues de instanciar el núcleo?

toba_nucleo::instancia()->acceso_rest();
La colocas en el contexto de ejecucion del proyecto, hay un metodo conf__rest especifico para que puedas modificar el pedido.

Saludos

Genial! pude hacerlo funcionar. Comparto la solución:

Cree un archivo que extiende de SIUToba\rest\seguridad\proveedor_autorizacion

<?php

class proveedor_autorizacion_unlu extends \SIUToba\rest\seguridad\proveedor_autorizacion
{
    public function tiene_acceso($usuario, $ruta){
    	return true;
    }
}

Cargué ese archivo en el autoload del proyecto

'proveedor_autorizacion_unlu' => 'rest/proveedor_autorizacion_unlu.php',

Y por último, en el archivo del contexto de ejecución [1], agregué lo siguiente:

function conf__rest($app){
    $app->set_autorizador(new proveedor_autorizacion_unlu());
}

Saludos
Maxi

[1] Si no existe en el proyecto, se define desde Configuración → Propiedades → Extensión del núcleo