[php + frontend] dudas existenciales

soanix

Muy buenas,

Desde un programador anclado en el Request -> Response del PHP tradicional, en el que quien decide que se muestra en pantalla es el PHP de forma transparente para el usuario (incluyendo peticiones en segundo plano, no soy un ermitaño). Por cuestiones de supervivencia debo evolucionar y usar librerias/framework de frontend (React, Vue, Angular, etc...).

El objetivo es llegar a una programación hexagonal. Pasar a microservicios (estoy en un bypass entre un sistema monolítico y microservicios con un sistema monolítico dockerizado en servicios separados... Ya lo se... un show...).

Me considero un programador todo terreno y me cuesta 0 absolver código ya escrito (gracias por los aplausos y los pines), pero hay ciertas cosas que me traen de culo y me encuentro en un punto en el que antes de picar 0 líneas necesito solucionar y no encuentro la manera de encajar las piezas.

Os pongo el ejemplo de como lo tengo ahora o como debería funcionar (de forma simplificada para dummies) y luego matizamos:

  1. Entra usuario (autentificado en sesión) con unos permisos específicos de un perfil definido en base de datos. Estos permisos permiten acceder a las secciones B, D y H.
  2. Los accesos a esta secciones se muestran y los demás no.
  3. El usuario no tiene constancia de la existencia de las demás secciones y no son visibles desde código.
  4. Aunque tuviese constancia, al acceder a la url le aparecería 403 o 404 a discreción del programador (mucha suerte).

Ahora bien, pongamos que me paso a frontend y he sido capaz de sustituir node por un listener en PHP que he buscado en google y le he dado a voy a tener suerte: ReactPHP.

Esto para la comunicación a tiempo real genial, pero en el tema de permisos y teniendo en cuenta que los templates están en el JS por lo tanto en el cliente. No se como notificar a React (en este caso) de que ese usuario no puede ver las 200 secciones que no tiene acceso sin que pueda ser manipulable desde el cliente. Porque sinceramente, se que podría denegar el permiso cuando realice la petición, pero es que no quiero darle la información si no la necesita. No quiero que un usuario avanzado, pueda realizar una petición a la api y le diga los permisos que tiene, porque no tengo ganas de que sepa la estructura interna.

Me niego a pensar que a estas alturas esto no está solucionado. Y también me niego a pensar que por cada elemento de la pantalla tengo que hacer una petición al servidor. Y aquí ya me da igual que sea Node, PHP, Python, o MyGoodluckGoogleServer ya me entendéis.

Puesto encima de la mesa el "percal":

  • ¿Vale la pena intentar mantener PHP como backend? (Intentar ser objetivos y ahorraros el hate a PHP que nos conocemos)
  • Independientemente del Backend, ¿Cómo gestiono los permisos de visualización del usuario sin darle esa información al frontend?
  • ¿Estoy mal organizado en mi cabeza y eso no funciona así? Es una posibilidad muy probable...

Pregunta extra como opinión personal:
Estoy casi seguro que me voy a poner con React pero me tiene intrigado Vue, cual es vuestra experiencia?

Falta decir que cualquier consejo es bienvenido.

Gracias por la ayuda.

kidandcat

Puedes hacer una petición a la API que le diga los permisos que tiene sin desvelar otros módulos disponibles, por ejemplo que el endpoint le diga sólo lo que tiene que mostrar, y no todo lo que hay.

La teoría es que usas React (o lo que sea) para que de una sola vez se cargue toda tu interfaz, de esa forma reduces tiempos. De todas formas React como tal es una librería de UI, puedes hacer lo que quieras con él. Facebook por ejemplo cuando empezó solo tenia algunos componentes con React.

¿Vale la pena intentar mantener PHP como backend?
Lo que más te guste, no hay problema en usar PHP

Independientemente del Backend, ¿Cómo gestiono los permisos de visualización del usuario sin darle esa información al frontend?
¿Estoy mal organizado en mi cabeza y eso no funciona así?
Emm, GET /permissions -> { allowed: [ 'profile', 'dashboard', 'menu' ] }
Con esto el usuario no va a saber qué más hay, a lo mejor estabas pensando que tienes que enviarle algo como { profile: true, menu: false, dashboard: true }?

Estoy casi seguro que me voy a poner con React pero me tiene intrigado Vue, cual es vuestra experiencia?
Para gustos colores. Al final son todos iguales, pero la gente irá a la guerra por su framework favorito.

JuAn4k4

Son los datos (backend) a lo que no puede acceder, no al layout/template que los nuestra (frontend). Le devuelves en la API 403/401/404 y a correr.
El front puede ser consciente de aquí qué puede y no puede acceder el usuario dados sus roles/permisos hasta cierto punto, similar a implementar feature flags.

Es absorber por cierto, que me ha dolido.

10 días después
Simba26

¿Vale la pena intentar mantener PHP como backend? Si se te da bien puedes seguir usándolo, pero para lo que quieres una arquitectura hexagonal y pasar a microservicios deberias usar un lenguaje enfocado a microservicios como Golang, es muy simple y tiene muchas herramientas, su libreria net/http es una maravilla, y prácticamente no necesitas ningún framework sino alguna librería para algo en concreto.

Independientemente del Backend, ¿Cómo gestiono los permisos de visualización del usuario sin darle esa información al frontend?

Mediante una peticion GET envias los permisos que tiene el usuario al front end, y alli para evitar hacer tantas peticiones GET al servidor almacenas dichos roles por ejemplo en redux o context con react.

Usuarios habituales

  • Simba26
  • JuAn4k4
  • kidandcat
  • soanix