dcorreah / powerbi
Power BI reports (backend + Vue) para Laravel
dev-main
2025-09-12 15:20 UTC
Requires
- php: ^8.3
- illuminate/http: ^12.0
- illuminate/support: ^12.0
This package is auto-updated.
Last update: 2025-09-12 15:20:26 UTC
README
Integración de reportes Power BI para Laravel (backend + Vue). Mantiene el flujo de autenticación actual (ROPC con AAD) y compatibilidad de filtros por usuario.
Requisitos
- PHP 8.3+
- Laravel 11+
- Inertia + Vue 3 (Vite) en el proyecto host
- NPM/Yarn (para
powerbi-client
)
Instalación
- Instalar el paquete
# Dentro de tu stack (ejemplo con Docker) docker compose exec app composer require dcorreah/powerbi
- Publicar configuración, migraciones y assets Vue
docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-config --force docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-migrations --force docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-assets --force
- Ejecutar migraciones
docker compose exec app php artisan migrate
- Configurar variables de entorno (
.env
)
POWERBI_USER_ID= POWERBI_GRANT_TYPE=password POWERBI_CLIENT_ID= POWERBI_CLIENT_SECRET= POWERBI_RESOURCE=https://analysis.windows.net/powerbi/api POWERBI_USERNAME= POWERBI_PASSWORD= # Opcionales del paquete POWERBI_REGISTER_ROUTES=true POWERBI_ROUTE_PREFIX=reports
Integración en el modelo User
Ańade el trait para la relación con reportes Power BI:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use dcorreah\PowerBI\Traits\HasPowerBIReports; class User extends Authenticatable { use HasPowerBIReports; }
Frontend
- Instalar dependencias
npm i powerbi-client powerbi-client-vue-js
- Usa el componente publicado en
resources/js/vendor/powerbi/Components/ReportViewer.vue
dentro de tu página Inertia. Si no tienes la página, crearesources/js/Pages/Report/View.vue
:
<template> <div class="p-4"> <ReportViewer :report="report" /> </div> </template> <script setup> import ReportViewer from '@/vendor/powerbi/Components/ReportViewer.vue' const props = defineProps({ report: { type: Object, required: true } }) </script>
El controlador del paquete enviará la prop report
con report_id
, embedUrl
, token
y filter_array
.
Rutas incluidas
- Prefijo configurable:
POWERBI_ROUTE_PREFIX
(por defectoreports
). - Middleware:
web
,auth
. - Nombres de ruta:
report.index
→ GET/{prefix}
report.view
→ GET/{prefix}/{groupId}/{reportId}/view
Si POWERBI_REGISTER_ROUTES=false
, puedes cargar tus propias rutas y usar los controladores del paquete directamente.
Modelo y tablas
El paquete crea las tablas (compatibles con tu app):
reports
(campos:name
,group_id
,report_id
,access_level
,dataset_id
,user_id
,token
,expiration_date
, flagsorder
,commission
,portfolio
).report_filters
(definición de filtros).user_reports
(pivot User↔Report conshow
).pvt_report_user_filters
(pivot Report↔Filter por usuario).global_tokens
(almacenamiento del token AAD global).
Asignación rápida de reportes a usuarios (Tinker)
docker compose exec app php artisan tinker
use dcorreah\PowerBI\Models\Report; $report = Report::create([ 'name' => 'Mi Reporte', 'group_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'report_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'access_level' => 'View', 'dataset_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'user_id' => 1, ]); $user = \App\Models\User::find(1); $user->reports()->attach($report->id, ['show' => true]);
Autenticación y tokens
- Flujo: ROPC (grant_type=password) contra
https://login.windows.net/common/oauth2/token
. - El token se almacena en
global_tokens
y se renueva segúnexpires_in
. - Frontend usa
tokenType: Aad
y oculta el panel de filtros.
Configuración avanzada
POWERBI_ROUTE_PREFIX
: cambia el prefijo de rutas (por ejemplo,analytics
).POWERBI_REGISTER_ROUTES
: desactívalo para registrar tus propias rutas.
Notas
- Para filtros por usuario, usa
report_filters
y la relación pivot; el paquete calcularáfilter_array
automáticamente para el usuario autenticado. - Si usas Spatie Roles, se mostrará todo para
super-admin
; de lo contrario, se listan los reportes asociados al usuario. - Asegúrate de no exponer credenciales AAD en el frontend; todo el intercambio ocurre en el backend.