Admin panel + breeze + spatie permission - Laravel 11


Escrito por zEOCk hace hace 4 meses

Compartir En redes Sociales

Facebook WhatsApp Youtube

En este articulo aprenderas a crear un panel administrativo haciendo uso de Laravel 11 + Laravel breeze + Spatie permission, negando el acceso a usuarios que no sean administradores del sitio.

1 - Creamos un proyecto nuevo e instalamos laravel breeze


Laravel new admin

Y escogemos "breeze" para que nos instale todo lo necesario de la autenticacion en nuestro proyecto.

2 - Instalar Spatie PermiSSion


 composer require spatie/laravel-permission

3 - Agregamos la siguiente línea en bootstrap/providers.php file:


'providers' => [
    // ...
    Spatie\Permission\PermissionServiceProvider::class,
];

4 - Publicamos la migración y el archivo de configuración config/permission.php


php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

5 - Ejecutamos las migraciones


Php artisan migrate

6 - creamos los roles


Nos vamos a app\model\User y agregamos lo siguiente:

use Spatie\Permission\Traits\HasRoles;

Dentro de la clase

 use HasRoles;

7 -  Agregamos los middlewares en la carpeta Bootstrap/app.php


  $middleware->alias([
            'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
            'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
            'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class
        ]);


8 - Nos vamos a las rutas web y agregamos la siguiente línea


use Spatie\Permission\Models\Role;
 $role = Role::create(['name' => 'admin']);
 $role = Role::create(['name' => 'cliente']);

9 - Creamos los roles admin y cliente


Nos vamos al home de la página y damos f5 o actualizar para que se creen los roles
admin
cliente

Una vez creamos, comentamos las líneas para que no se intenten crear de nuevo.

10 - creamos un middleware


 php artisan make:middleware administrador

Agregamos la siguiente línea en el archivo app/http/middleware/administrador.php


use Illuminate\Support\Facades\Auth;

public function handle(Request $request, Closure $next): Response
    {
        if(auth()->check() && Auth::user()->hasRole('admin')){
            return $next($request);
     }
    return redirect('/');
    }

Lo que van hacer estas líneas es restringir el acceso al panel administrativo a los usuarios al menos que tengan el role de administrador


11 - Agregamos la siguiente línea en el archivo bootstrap/app



 ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin' => \App\Http\Middleware\administrador::class,
        ]);
    })

12 - añadimos el middleware a las rutas web


use App\Http\Middleware\administrador;
use App\Http\Controllers\admin\DashBoardController;
Route::middleware([administrador::class])->group(function () {
    Route::get('/dashboard', [DashBoardController::class, 'index'])->name('dashboard');
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});

13 - Creamos un controlador para el dashboard


php artisan make:controller admin\DashBoardController

Creamos el metodo index en el controlador antes creado

public function index(){

        return view('dashboard');
    }

14 - creamos el usuario con el role "admin"


Nos vamos a app\Http\Controllers\Auth\RegisteredUserController al método create y agregamos la siguiente línea:

 ])->assignRole('cliente');

Lo que hace esto es agregar el rol cliente a nuestro usuario, esto es para hacer pruebas, pero para producción podemos crear un modulo
de creación de usuarios roles y permisos en nuestro administrador, el cual estamos realizando en este artículo.

Ya con el usuario creado podemos iniciar sesión y nos mandara directo al panel administrativo, si creamos el usuario con role de cliente, nos debería mandar al home de la página, quedando restringido el panel solamente para administradores.

por ultimo creamos un boton para cerrar la secion como cliente en la pagina principal del sitio. "home" en la vista welcome.

        <form method="POST" action="{{ route('logout') }}">

                                @csrf
                                <a href="route('logout')" onclick="event.preventDefault();
                                                this.closest('form').submit();" class="text-black ring-transparent text-white">
                                    {{ __('Log Out') }}
                                </a>
                            </form>



Etiquetas:


Compartir En redes Sociales

Facebook WhatsApp Youtube

Generic placeholder image
Ing. Obed Sánchez

Gusto por las motos Harley Davidson, el rock n roll y la informática, creador de este blog para difusión del conocimiento libre, interesado en el mundo open source.