Saltar a contenido

Backend de Administración

El backend de administración se ejecuta a través de un controlador Perl nativo y modelos específicos por dominio en lugar de la cadena de handlers ClaJS. Las peticiones del frontend siguen usando /plugin/admin?path=..., pero lib/Baseliner/Controller/Plugin.pm ahora dirige el tráfico de administración hacia lib/Baseliner/Controller/Admin.pm, que delega el comportamiento de cada endpoint a modelos específicos por dominio.

Esto mantiene intacto el contrato del UI React existente mientras elimina la dependencia en tiempo de ejecución del controlador admin basado en Duktape. Los archivos ClaJS heredados permanecen en disco como material de reversión, pero ya no forman parte de la ruta activa de peticiones.

Arquitectura

Un único controlador (Admin.pm) con una tabla de despacho unificada mapea los valores de path a métodos de modelo. El shim del frontend (plugins/admin/src/lib/adminRequest.js) elimina el prefijo admin/ de las rutas de las peticiones y dirige las llamadas a /admin/api.

Modelos

Modelo Dominio Endpoints
AdminProject CRUD de proyectos, permisos, entornos 12
AdminUser Gestión de usuarios/roles/permisos 7
AdminSystemStats Agregación de estadísticas del sistema 1
AdminConfig Configuración, etiquetas, labels, repositorios 11

Endpoints Cubiertos

Dominio de proyecto (AdminProject):

  • project/list — lista paginada de proyectos con flags de admin
  • project/get — cargar un proyecto
  • project/insert — crear un nuevo proyecto
  • project/update — actualizar propiedades del proyecto
  • project/delete — eliminar un proyecto
  • project/activate — activar un proyecto
  • project/disable — desactivar un proyecto
  • project/listEnvironments — listar entornos activos
  • project/createRepository — crear un repositorio git para un proyecto
  • project/hasPermission — verificar si el usuario puede administrar un proyecto
  • project/canCreate — verificar si el usuario puede crear proyectos
  • project/checkTopics — contar topics vinculados a un proyecto

Dominio de usuario (AdminUser):

  • user/list — listar usuarios y grupos de usuarios en un proyecto con roles
  • user/listUsersProfiles — listar usuarios y grupos excluyendo los predeterminados
  • user/listRoles — listar roles otorgados al usuario actual
  • user/listUsers — listar usuarios regulares
  • user/permissions — asignar/desasignar roles a usuarios para un proyecto
  • user/deletePermissions — eliminar permisos de usuario de un proyecto
  • user/editPermissions — obtener IDs de roles del usuario para un proyecto

Dominio de configuración (AdminConfig):

  • config/list — listar configuraciones con verificación de permisos
  • config/save — guardar configuraciones
  • tags/list — listar tags con verificación de permisos
  • label/list — listar labels con ámbito de proyecto/global
  • label/insert — crear un label
  • label/update — actualizar un label
  • label/delete — eliminar un label
  • repository/list — listar repositorios de un proyecto
  • repository/delete — eliminar un repositorio
  • repository/getTypes — obtener tipos de repositorios disponibles
  • repository/createRepositoryExternal — crear un repositorio no-git

Estadísticas del sistema (AdminSystemStats):

  • system_stats/list — estadísticas del sistema agregadas con filtrado y paginación

Verificaciones de permisos (inline en el controlador):

  • event/canAdminEvents
  • variable/canAdminVariables
  • resource/canAdminResources
  • role/canAdminRoles
  • usergroup/canAdminUserGroups
  • status/canAdminStatus
  • resource/canViewResources
  • repl/canAdminREPL
  • user/canAdminUsers

Validación

./bin/cla exec perl -c lib/Baseliner/Controller/Admin.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminProject.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminUser.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminConfig.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminSystemStats.pm
./bin/cla prove t/baseliner/controller/admin.t
./bin/cla prove t/baseliner/model/admin_project.t
./bin/cla prove t/baseliner/model/admin_user.t
./bin/cla prove t/baseliner/model/admin_config.t
./bin/cla prove t/baseliner/model/admin_system_stats.t