diff --git a/app/Http/Controllers/Admin/PermissionTypeController.php b/app/Http/Controllers/Admin/PermissionTypeController.php index ffcca11..46d7346 100644 --- a/app/Http/Controllers/Admin/PermissionTypeController.php +++ b/app/Http/Controllers/Admin/PermissionTypeController.php @@ -40,8 +40,13 @@ public function all() */ public function allWithPermissions() { + $hidden = ['Actividad']; + return ApiResponse::OK->response([ - 'models' => PermissionType::with('permissions')->orderBy('name')->get() + 'models' => PermissionType::with('permissions') + ->whereNotIn('name', $hidden) + ->orderBy('name') + ->get() ]); } } diff --git a/app/Http/Controllers/Admin/RoleController.php b/app/Http/Controllers/Admin/RoleController.php index c990e70..0df25c4 100644 --- a/app/Http/Controllers/Admin/RoleController.php +++ b/app/Http/Controllers/Admin/RoleController.php @@ -103,8 +103,12 @@ public function destroy(Role $role) */ public function permissions(Role $role) { + $permissions = $role->id === 2 + ? $role->permissions->filter(fn($p) => !str_starts_with($p->name, 'activities.')) + : $role->permissions; + return ApiResponse::OK->response([ - 'permissions' => $role->permissions + 'permissions' => $permissions->values() ]); } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 1c1114e..e27f6ab 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -12,6 +12,7 @@ use App\Supports\QuerySupport; use Illuminate\Http\Request; use Notsoweb\ApiResponse\Enums\ApiResponse; +use Illuminate\Routing\Controllers\HasMiddleware; /** * Controlador de usuarios @@ -22,8 +23,20 @@ * * @version 1.0.0 */ -class UserController extends Controller +class UserController extends Controller implements HasMiddleware { + + /** + * Middleware + */ + public static function middleware(): array + { + return [ + self::can('users.index', ['index']), + self::can('users.destroy', ['destroy']), + ]; + } + /** * Listar */ diff --git a/app/Http/Controllers/Repuve/CatalogController.php b/app/Http/Controllers/Repuve/CatalogController.php index 94572c9..eda0fa0 100644 --- a/app/Http/Controllers/Repuve/CatalogController.php +++ b/app/Http/Controllers/Repuve/CatalogController.php @@ -12,24 +12,12 @@ use App\Models\CatalogCancellationReason; use Illuminate\Http\Request; use Notsoweb\ApiResponse\Enums\ApiResponse; -use Illuminate\Routing\Controllers\HasMiddleware; /** * Descripción */ -class CatalogController extends Controller implements HasMiddleware +class CatalogController extends Controller { - /** - * Middleware - */ - public static function middleware(): array - { - return [ - self::can('catalogs.cancellation_reasons.index', ['index']), - self::can('catalogs.cancellation_reasons.show', ['show']), - self::can('catalogs.cancellation_reasons.destroy', ['destroy']), - ]; - } public function index(Request $request) { diff --git a/app/Http/Controllers/Repuve/CatalogNameImgController.php b/app/Http/Controllers/Repuve/CatalogNameImgController.php index 8cc1b82..f652fd6 100644 --- a/app/Http/Controllers/Repuve/CatalogNameImgController.php +++ b/app/Http/Controllers/Repuve/CatalogNameImgController.php @@ -6,22 +6,10 @@ use App\Http\Requests\Repuve\CatalogNameImgUpdateRequest; use App\Http\Controllers\Controller; use App\Models\CatalogNameImg; -use Illuminate\Routing\Controllers\HasMiddleware; use Notsoweb\ApiResponse\Enums\ApiResponse; -class CatalogNameImgController extends Controller implements HasMiddleware +class CatalogNameImgController extends Controller { - /** - * Middleware - */ - public static function middleware(): array - { - return [ - self::can('catalogs.name_img.index', ['index']), - self::can('catalogs.name_img.destroy', ['destroy']), - ]; - } - /** * Listar */ diff --git a/app/Http/Controllers/Repuve/InscriptionController.php b/app/Http/Controllers/Repuve/InscriptionController.php index aa22d7e..2f980d5 100644 --- a/app/Http/Controllers/Repuve/InscriptionController.php +++ b/app/Http/Controllers/Repuve/InscriptionController.php @@ -29,8 +29,8 @@ class InscriptionController extends Controller implements HasMiddleware public static function middleware(): array { return [ - self::can('repuve.search_records', ['searchRecord']), - self::can('repuve.check_stolen', ['stolen']), + self::can('inscription.search', ['searchRecord']), + self::can('inscription.search.national', ['stolen']), ]; } diff --git a/app/Http/Controllers/Repuve/RecordController.php b/app/Http/Controllers/Repuve/RecordController.php index 34f299a..7127d1b 100644 --- a/app/Http/Controllers/Repuve/RecordController.php +++ b/app/Http/Controllers/Repuve/RecordController.php @@ -21,9 +21,10 @@ class RecordController extends Controller implements HasMiddleware public static function middleware(): array { return [ - self::can('records.index', ['index']), - self::can('records.show', ['show']), - self::can('records.generate_pdf', ['generatePdf', 'generatePdfVerification', 'generatePdfConstancia', 'generatePdfImages', 'generatePdfForm']), + self::can('records.generate_pdf', ['generatePdf']), + self::can('records.generate_pdf_form', ['generatePdfForm']), + self::can('records.generate_pdf_constancia', ['generatePdfConstancia']), + self::can('records.generate_pdf_verification', ['generatePdfVerification']), ]; } diff --git a/app/Http/Controllers/Repuve/UpdateController.php b/app/Http/Controllers/Repuve/UpdateController.php index c3f4baf..8d4059f 100644 --- a/app/Http/Controllers/Repuve/UpdateController.php +++ b/app/Http/Controllers/Repuve/UpdateController.php @@ -33,8 +33,9 @@ class UpdateController extends Controller implements HasMiddleware public static function middleware(): array { return [ - self::can('records.update', ['updateData']), - self::can('records.update', ['tagSubstitution']), + self::can('updates.vehicle-data', ['vehicleUpdate']), + self::can('updates.vehicle-update', ['updateData']), + self::can('updates.resend-to-repuve', ['resendToRepuve']), ]; } diff --git a/app/Http/Requests/Repuve/CatalogCancellationReasonStoreRequest.php b/app/Http/Requests/Repuve/CatalogCancellationReasonStoreRequest.php index 222b741..907e17c 100644 --- a/app/Http/Requests/Repuve/CatalogCancellationReasonStoreRequest.php +++ b/app/Http/Requests/Repuve/CatalogCancellationReasonStoreRequest.php @@ -7,7 +7,7 @@ class CatalogCancellationReasonStoreRequest extends FormRequest public function authorize(): bool { - return auth()->user()->can('catalogs.cancellation_reasons.create'); + return true; } public function rules(): array diff --git a/app/Http/Requests/Repuve/CatalogCancellationReasonUpdateRequest.php b/app/Http/Requests/Repuve/CatalogCancellationReasonUpdateRequest.php index 2db3753..b305743 100644 --- a/app/Http/Requests/Repuve/CatalogCancellationReasonUpdateRequest.php +++ b/app/Http/Requests/Repuve/CatalogCancellationReasonUpdateRequest.php @@ -7,7 +7,7 @@ class CatalogCancellationReasonUpdateRequest extends FormRequest public function authorize(): bool { - return auth()->user()->can('catalogs.cancellation_reasons.edit'); + return true; } public function rules(): array diff --git a/app/Http/Requests/Repuve/RecordSearchRequest.php b/app/Http/Requests/Repuve/RecordSearchRequest.php deleted file mode 100644 index 93402ee..0000000 --- a/app/Http/Requests/Repuve/RecordSearchRequest.php +++ /dev/null @@ -1,50 +0,0 @@ -user()->can('repuve.records.search'); - } - - public function rules(): array - { - return [ - 'folio' => ['nullable', 'string', 'max:50'], - 'niv' => ['nullable', 'string', 'max:50'], - 'numero_serie' => ['nullable', 'string', 'max:50'], - 'fecha_desde' => ['nullable', 'date', 'date_format:Y-m-d'], - 'fecha_hasta' => ['nullable', 'date', 'date_format:Y-m-d', 'after_or_equal:fecha_desde'], - ]; - } - - public function messages(): array - { - return [ - 'folio.string' => 'El folio debe ser una cadena de texto', - 'niv.string' => 'El NIV debe ser una cadena de texto', - 'numero_serie.string' => 'El número de serie debe ser una cadena de texto', - 'fecha_desde.date' => 'La fecha desde debe ser una fecha válida', - 'fecha_desde.date_format' => 'La fecha desde debe tener el formato Y-m-d', - 'fecha_hasta.date' => 'La fecha hasta debe ser una fecha válida', - 'fecha_hasta.after_or_equal' => 'La fecha hasta debe ser posterior o igual a la fecha desde', - ]; - } - - public function withValidator($validator) - { - $validator->after(function ($validator) { - if (!$this->filled('folio') && - !$this->filled('niv') && - !$this->filled('numero_serie') && - !$this->filled('fecha_desde')) { - $validator->errors()->add( - 'search', - 'Debe proporcionar al menos un criterio de búsqueda (folio, niv o fecha_desde)' - ); - } - }); - } -} diff --git a/app/Http/Requests/Repuve/VehicleStoreRequest.php b/app/Http/Requests/Repuve/VehicleStoreRequest.php index 211f210..eeccdb2 100644 --- a/app/Http/Requests/Repuve/VehicleStoreRequest.php +++ b/app/Http/Requests/Repuve/VehicleStoreRequest.php @@ -7,7 +7,7 @@ class VehicleStoreRequest extends FormRequest public function authorize(): bool { - return auth()->user()->can('vehicles.create'); + return auth()->user()->can('inscription.vehicle'); } public function rules(): array diff --git a/app/Http/Requests/Repuve/VehicleUpdateRequest.php b/app/Http/Requests/Repuve/VehicleUpdateRequest.php index 3421fa3..d27e3f1 100644 --- a/app/Http/Requests/Repuve/VehicleUpdateRequest.php +++ b/app/Http/Requests/Repuve/VehicleUpdateRequest.php @@ -9,7 +9,7 @@ class VehicleUpdateRequest extends FormRequest public function authorize(): bool { - return auth()->user()->can('vehicles.edit'); + return auth()->user()->can('updates.vehicle-update'); } public function rules(): array diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index eabb82b..513a3c2 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -28,9 +28,8 @@ class RoleSeeder extends Seeder */ public function run(): void { - $users = PermissionType::firstOrCreate([ - 'name' => 'Usuarios' - ]); + // === USUARIOS === + $users = PermissionType::firstOrCreate(['name' => 'Usuarios']); [ $userIndex, @@ -39,11 +38,8 @@ public function run(): void $userDestroy ] = $this->onCRUD('users', $users, 'api'); - $userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api'); - - $roles = PermissionType::firstOrCreate([ - 'name' => 'Roles' - ]); + // === ROLES === + $roles = PermissionType::firstOrCreate(['name' => 'Roles']); [ $roleIndex, @@ -51,11 +47,11 @@ public function run(): void $roleEdit, $roleDestroy ] = $this->onCRUD('roles', $roles, 'api'); + $rolePermissions = $this->onPermission('roles.permissions', 'Permisos de roles', $roles, 'api'); - $modules = PermissionType::firstOrCreate([ // Modulos - 'name' => 'Módulos' - ]); + // === MÓDULOS === + $modules = PermissionType::firstOrCreate(['name' => 'Módulos']); [ $moduleIndex, @@ -64,16 +60,10 @@ public function run(): void $moduleDestroy ] = $this->onCRUD('modules', $modules, 'api'); - $moduleToggleStatus = $this->onPermission( - 'modules.toggle_status', - 'Cambiar estado del módulo', - $modules, - 'api' - ); + $moduleToggleStatus = $this->onPermission('modules.toggle_status', 'Cambiar estado del módulo', $modules, 'api'); - $devices = PermissionType::firstOrCreate([ //Dispositivos - 'name' => 'Dispositivos Móviles' - ]); + // === DISPOSITIVOS MÓVILES === + $devices = PermissionType::firstOrCreate(['name' => 'Dispositivos Móviles']); [ $deviceIndex, @@ -82,103 +72,51 @@ public function run(): void $deviceDestroy ] = $this->onCRUD('devices', $devices, 'api'); - $inscriptions = PermissionType::firstOrCreate([ // Inscripciones de vehículos - 'name' => 'Proceso de Sustitución por primera vez' - ]); + $deviceToggleStatus = $this->onPermission('devices.toggle_status', 'Cambiar estado del dispositivo', $devices, 'api'); - $inscriptionVehicle = $this->onPermission( - 'inscription.vehicle', - 'Inscribir vehículo', - $inscriptions, - 'api' - ); + // === INSCRIPCIONES === + $inscriptions = PermissionType::firstOrCreate(['name' => 'Proceso de Sustitución por primera vez']); - $inscriptionSearch = $this->onPermission( - 'inscription.search.national', - 'Buscar en consulta nacional', - $inscriptions, - 'api' - ); + $inscriptionVehicle = $this->onPermission('inscription.vehicle', 'Inscribir vehículo', $inscriptions, 'api'); + $inscriptionSearchNational = $this->onPermission('inscription.search.national', 'Buscar en consulta nacional', $inscriptions, 'api'); + $inscriptionSearch = $this->onPermission('inscription.search', 'Buscar en consulta', $inscriptions, 'api'); - $inscriptionBusqueda = $this->onPermission( - 'inscription.search', - 'Buscar en consulta', - $inscriptions, - 'api' - ); + // === CANCELACIONES === + $cancellations = PermissionType::firstOrCreate(['name' => 'Cancelaciones']); - $cancellations = PermissionType::firstOrCreate([ - 'name' => 'Cancelaciones' - ]); + $cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api'); + // === ACTUALIZAR REGISTRO === + $updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']); - $cancellationTagNoAsignado = $this->onPermission( - 'cancellations.tag_no_asignado', - 'Cancelar constancia no asignada', - $cancellations, - 'api' - ); + $updateVehicleData = $this->onPermission('updates.vehicle-data', 'Actualizar datos de vehículo por formulario', $updates, 'api'); + $updateVehicleUpdate = $this->onPermission('updates.vehicle-update', 'Actualizar datos de vehículo', $updates, 'api'); + $updateResendToRepuve = $this->onPermission('updates.resend-to-repuve', 'Reenviar a REPUVE', $updates, 'api'); - $updates = PermissionType::firstOrCreate([ - 'name' => 'Actualizar Registro' - ]); + // === GENERAR FORMATOS === + $formats = PermissionType::firstOrCreate(['name' => 'Generar Formatos']); - $updateVehicleData = $this->onPermission( - 'updates.vehicle-data', - 'Consultar datos de vehículo', - $updates, - 'api' - ); + $recordGeneratePdf = $this->onPermission('records.generate_pdf', 'Generar Hoja de recepción', $formats, 'api'); + $recordGeneratePdfForm = $this->onPermission('records.generate_pdf_form', 'Generar solicitud de sustitución', $formats, 'api'); + $recordGeneratePdfVerification = $this->onPermission('records.generate_pdf_verification', 'Generar Hoja de verificación', $formats, 'api'); + $recordGeneratePdfConstancia = $this->onPermission('records.generate_pdf_constancia', 'Generar Impresión en la constancia', $formats, 'api'); - $updateVehicleUpdate = $this->onPermission( - 'updates.vehicle-update', - 'Actualizar datos de vehículo', - $updates, - 'api' - ); + // === REPORTES === + $reports = PermissionType::firstOrCreate(['name' => 'Reportes - Excel']); - $records = PermissionType::firstOrCreate([ - 'name' => 'Generar Formatos' - ]); + $reportVehicleUpdates = $this->onPermission('reports.vehicle_updates.index', 'Reporte de actualizaciones', $reports, 'api'); + $reportSubstitutions = $this->onPermission('reports.substitutions.index', 'Reporte de sustituciones', $reports, 'api'); + $reportCancellations = $this->onPermission('reports.cancellations.index', 'Reporte de cancelaciones', $reports, 'api'); + $reportGeneral = $this->onPermission('reports.general.index', 'Reporte general', $reports, 'api'); + $reportSearchRecords = $this->onPermission('reports.search_records.index', 'Reporte de consulta nacional', $reports, 'api'); - $recordGeneratePdf = $this->onPermission( - 'records.generate_pdf', - 'Generar Hoja de recepción', - $records, - 'api' - ); + // === ACTIVIDAD === + $activities = PermissionType::firstOrCreate(['name' => 'Actividad']); - $recordGeneratePdfVerification = $this->onPermission( - 'records.generate_pdf_verification', - 'Generar Hoja de verificación', - $records, - 'api' - ); + $activityIndex = $this->onPermission('activities.index', 'Ver actividad de usuarios', $activities, 'api'); - $recordGeneratePdfConstancia = $this->onPermission( - 'records.generate_pdf_constancia', - 'Generar Impresión en la constancia', - $records, - 'api' - ); - - $recordGeneratePdfSubtitution = $this->onPermission( - 'records.generate_pdf_substitution', - 'Generar Solicitud de sustitución', - $records, - 'api' - ); - - $recordGeneratePdfDamaged = $this->onPermission( - 'records.generate_pdf_damaged', - 'Generar PDF constancia dañada', - $records, - 'api' - ); - - $packages = PermissionType::firstOrCreate([ - 'name' => 'Cajas' - ]); + // === CAJAS === + $packages = PermissionType::firstOrCreate(['name' => 'Cajas']); [ $packageIndex, @@ -187,9 +125,10 @@ public function run(): void $packageDestroy ] = $this->onCRUD('packages', $packages, 'api'); - $tags = PermissionType::firstOrCreate([ - 'name' => 'Constancias de Inscripción' - ]); + $packageBoxTags = $this->onPermission('packages.box_tags', 'Ver constancias de caja', $packages, 'api'); + + // === CONSTANCIAS DE INSCRIPCIÓN === + $tags = PermissionType::firstOrCreate(['name' => 'Constancias de Inscripción']); [ $tagIndex, @@ -198,125 +137,83 @@ public function run(): void $tagDestroy, ] = $this->onCRUD('tags', $tags, 'api'); - $tagAssignToModule = $this->onPermission( - 'tags.assign_to_module', - 'Asignar etiquetas a módulo', - $tags, - 'api' - ); + $tagAssignToModule = $this->onPermission('tags.assign_to_module', 'Asignar etiquetas a módulo', $tags, 'api'); + // ========================================================= + // ROLES + // ========================================================= // Desarrollador Role::updateOrCreate([ 'name' => 'developer', - 'description' => 'Desarrollador', 'guard_name' => 'api' - ])->syncPermissions(Permission::all()); + ], ['description' => 'Desarrollador'])->syncPermissions(Permission::all()); // Administrador Role::updateOrCreate([ 'name' => 'admin', - 'description' => 'Administrador', 'guard_name' => 'api' - ])->syncPermissions( - $userIndex, - $userCreate, - $userEdit, - $userDestroy, - $userSettings, - $roleIndex, - $roleCreate, - $roleEdit, - $roleDestroy, - $rolePermissions, - $moduleIndex, //Módulos - $moduleCreate, - $moduleEdit, - $moduleDestroy, - $moduleToggleStatus, - $deviceIndex, //Dispositivos - $deviceCreate, - $deviceEdit, - $deviceDestroy, - $inscriptionVehicle, //Inscripcion de vehículos - $inscriptionSearch, - $inscriptionBusqueda, - $cancellationTagNoAsignado, //Cancelacion de constancia no asignada - $updateVehicleData, //Actualizaciones de vehículo - $updateVehicleUpdate, - $recordGeneratePdf, //Expedientes - $recordGeneratePdfVerification, - $recordGeneratePdfConstancia, - $recordGeneratePdfSubtitution, - $recordGeneratePdfDamaged, - $packageIndex, //Paquetes - $packageCreate, - $packageEdit, - $packageDestroy, - $tagIndex, //Etiquetas - $tagCreate, - $tagEdit, - $tagDestroy - + ], ['description' => 'Administrador'])->syncPermissions( + // Usuarios + $userIndex, $userCreate, $userEdit, $userDestroy, + // Roles + $roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions, + // Módulos + $moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleToggleStatus, + // Dispositivos + $deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus, + // Inscripciones + $inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational, + // Cancelaciones + $cancellationTagNoAsignado, + // Actualizaciones + $updateVehicleData, $updateVehicleUpdate, $updateResendToRepuve, + // Generar formatos + $recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm, + // Reportes + $reportVehicleUpdates, $reportSubstitutions, $reportCancellations, + $reportGeneral, $reportSearchRecords, + // Cajas + $packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags, + // Constancias + $tagIndex, $tagCreate, $tagEdit, $tagDestroy, ); // Encargado Role::updateOrCreate([ 'name' => 'encargado', - 'description' => 'Encargado', 'guard_name' => 'api' - ])->syncPermissions( - $userIndex, - $roleIndex, - - $deviceIndex, //Dispositivos - $deviceCreate, - $deviceEdit, - $deviceDestroy, - $inscriptionVehicle, //Inscripcion de vehículos - $inscriptionSearch, - $updateVehicleData, //Actualizaciones de vehículo - $updateVehicleUpdate, - $recordGeneratePdf, //Expedientes - $recordGeneratePdfVerification, - $recordGeneratePdfConstancia, - $recordGeneratePdfSubtitution, - $recordGeneratePdfDamaged, - $packageIndex, //Paquetes - $packageCreate, - $packageEdit, - $packageDestroy, - $tagIndex, //Etiquetas - $tagCreate, - $tagEdit, - $tagDestroy, - $tagAssignToModule - ); - - // Capturista - Role::updateOrCreate([ - 'name' => 'capturista', - 'description' => 'Capturista', - 'guard_name' => 'api' - ])->syncPermissions( - $userIndex, - $inscriptionVehicle, //Inscripcion de vehículos - $inscriptionSearch, - $updateVehicleData, //Actualizaciones de vehículo - $updateVehicleUpdate, + ], ['description' => 'Encargado'])->syncPermissions( + // Dispositivos + $deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus, + // Inscripciones + $inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational, + // Cancelaciones + $cancellationTagNoAsignado, + // Actualizaciones + $updateVehicleData, $updateVehicleUpdate, + // Generar formatos + $recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm, + // Reportes + $reportVehicleUpdates, $reportSubstitutions, $reportCancellations, + $reportGeneral, $reportSearchRecords, + // Cajas + $packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags, + // Constancias + $tagIndex, $tagCreate, $tagEdit, $tagDestroy, $tagAssignToModule, ); // Perito Role::updateOrCreate([ 'name' => 'perito', - 'description' => 'Perito', 'guard_name' => 'api' - ])->syncPermissions( - $userIndex, - $inscriptionVehicle, //Inscripcion de vehículos - $inscriptionSearch, - $updateVehicleData, //Actualizaciones de vehículo - $updateVehicleUpdate, + ], ['description' => 'Perito'])->syncPermissions( + // Generar formatos + $recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm, + // Cajas + $packageIndex, $packageBoxTags, + // Constancias + $tagIndex, ); } } diff --git a/dockerfile b/dockerfile index 8bc2b49..a2ad44c 100644 --- a/dockerfile +++ b/dockerfile @@ -34,6 +34,7 @@ RUN chown -R www-data:www-data /var/www/repuve-backend-v1/storage /var/www/repuv RUN chmod -R 775 /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache EXPOSE 9000 +EXPOSE 3306 ENTRYPOINT ["/usr/local/bin/entrypoint-dev.sh"] CMD ["php-fpm"]