Compare commits

...

2 Commits

  1. 1
      app/Http/Kernel.php
  2. 19
      app/Http/Middleware/AdminMiddleware.php
  3. 4
      config/session.php
  4. 6
      database/migrations/2014_10_12_000000_create_users_table.php
  5. 26
      resources/views/layouts/app.blade.php
  6. 43
      resources/views/layouts/dashboard.blade.php

1
app/Http/Kernel.php

@ -63,5 +63,6 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
}

19
app/Http/Middleware/AdminMiddleware.php

@ -0,0 +1,19 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AdminMiddleware
{
public function handle(Request $request, Closure $next)
{
if (Auth::check() && Auth::user()->email === 'monse@admin.com') {
return $next($request);
}
return redirect('/')->with('error', 'Acceso denegado. Solo los administradores pueden acceder a esta página.');
}
}

4
config/session.php

@ -31,9 +31,9 @@ return [
|
*/
'lifetime' => env('SESSION_LIFETIME', 120),
'lifetime' => env('SESSION_LIFETIME', 0.1),
'expire_on_close' => false,
'expire_on_close' => true,
/*
|--------------------------------------------------------------------------

6
database/migrations/2014_10_12_000000_create_users_table.php

@ -27,9 +27,9 @@ return new class extends Migration
});
DB::table('users')->insert([
'name'=> 'Administrador',
'email'=> 'admin@admin.com',
'password'=> bcrypt('12345678')
'name'=> 'monse',
'email'=> 'monse@admin.com',
'password'=> bcrypt('tecmm2025')
]);
}

26
resources/views/layouts/app.blade.php

@ -14,7 +14,7 @@
<link href="https://fonts.bunny.net/css?family=Nunito" rel="stylesheet">
<!-- Scripts -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
@ -51,22 +51,14 @@
</li>
@endif
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
<li class="nav-item d-flex align-items-center">
<span class="me-2">{{ Auth::user()->name }}</span>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: inline; margin: 0;">
@csrf
<button type="submit" class="btn btn-link text-danger p-0 m-0 align-baseline" title="Cerrar Sesión" style="font-size: 1.2rem; vertical-align: middle;">
<i class="fas fa-sign-out-alt"></i>
</button>
</form>
</li>
@endguest
</ul>

43
resources/views/layouts/dashboard.blade.php

@ -234,41 +234,16 @@
<!-- Navbar modernizado -->
<header class="bg-white/80 backdrop-blur-md shadow-sm">
<div class="flex items-center justify-between px-8 py-4">
<button class="md:hidden text-gray-500 hover:text-gray-700 transition-colors duration-200">
<i class="fas fa-bars text-xl"></i>
</button>
<div class="flex items-center space-x-4">
<div class="relative" x-data="{ open: false }">
<button @click="open = !open"
class="flex items-center space-x-3 text-gray-700 hover:text-gray-900 px-4 py-2 rounded-full hover:bg-gray-100 transition-all duration-200">
<img src="https://ui-avatars.com/api/?name={{ Auth::check() ? Auth::user()->name : 'Usuario' }}"
alt="Profile"
class="w-8 h-8 rounded-full ring-2 ring-blue-500/20">
<span class="font-medium">{{ Auth::check() ? Auth::user()->name : 'Usuario' }}</span>
<i class="fas fa-chevron-down text-sm transition-transform duration-200"
:class="{ 'transform rotate-180': open }"></i>
</button>
<!-- Menú desplegable modernizado -->
<div x-show="open"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="opacity-0 transform scale-95"
x-transition:enter-end="opacity-100 transform scale-100"
x-transition:leave="transition ease-in duration-150"
x-transition:leave-start="opacity-100 transform scale-100"
x-transition:leave-end="opacity-0 transform scale-95"
@click.away="open = false"
class="absolute right-0 mt-2 w-48 bg-white rounded-xl shadow-lg py-2 ring-1 ring-black ring-opacity-5">
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors duration-150">
<i class="fas fa-sign-out-alt mr-2"></i> Cerrar Sesión
</button>
</form>
</div>
</div>
<div class="flex items-center bg-gray-100 rounded-full px-3 py-1 shadow-sm">
<img src="https://ui-avatars.com/api/?name={{ Auth::user()->name }}&background=E5E7EB&color=374151&rounded=true&size=32" alt="Avatar" class="w-8 h-8 rounded-full mr-2">
<span class="font-semibold text-gray-800">{{ Auth::user()->name }}</span>
</div>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: inline; margin: 0;">
@csrf
<button type="submit" class="flex items-center text-red-600 hover:text-red-800 font-semibold px-3 py-1 rounded transition-colors duration-150" title="Cerrar Sesión">
<i class="fas fa-sign-out-alt mr-2"></i> Cerrar Sesión
</button>
</form>
</div>
</header>

Loading…
Cancel
Save