dcorreah / powerbi
Power BI reports (backend + Vue) para Laravel
Installs: 19
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/dcorreah/powerbi
Requires
- php: ^8.3
- illuminate/http: ^12.0
- illuminate/support: ^12.0
This package is auto-updated.
Last update: 2025-12-12 15:56:04 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.vuedentro 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_tokensy se renueva segúnexpires_in. - Frontend usa
tokenType: Aady 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_filtersy la relación pivot; el paquete calcularáfilter_arrayautomá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.