laravel 5.6 usuarios y roles - forma simple

para empezar:

 crear el
controller UsersController y la function index()
vista index.blade.php

para la bd:

creamos una migration para agregarle el campo "role" a la tabla User

ejecutarla

php artisan migrate

con el cliente de bd editar el campo de algunos registros y ponerle a algunos admin y a otros moderador y operadores, para el ejemplo supongamos que los usuarios 'admin' y 'moderador' tienen acceso al listado de usuarios.

entonces, creamos

el metodo en User

function hasRoles(array $roles){
  foreach($roles as $role){
    if($this->role === $role){
        return true;
    }
  }
  return false;
}

entonces, esta funcion nos puede servir para usar como condicion en el menu para mostrar o no, la opcion "Usuarios"

@if( auth()->user()->hasRoles(['admin','moderador'])
<li class="nav-item {{ activeMenu('users') }}">
<a class="nav-link" href="{{ route('users.index') }}" >Usuarios</a>
</li>
@endif

ahora tenemos que hacer que la url sea solo accesible por los usuarios con esos roles, entonces,
creamos un middleware:

php artisan make:middleware CheckRoles

public function handle($request, Closure $next)
    {

        $roles = array_slice(func_get_args(), 2);

        if(auth()->user()->hasRoles($roles)){
            return $next($request);   
        }
        return redirect('/');
       
    }


donde:

func_get_args() trae todos los parametros que se envian en la llamada al middleware
array_slice(func_get_args(), 2) excluye a los 2 primeros ($request y $next) para quedarse con los restantes que serian la lista de roles validos

no olvidar registrar el middleware en el kernel.php

 'checkRoles' => \App\Http\Middleware\CheckRoles::class,

finalmente, en el constructor de UsersController

 public function __construct(){
       $this->middleware(['auth','checkRoles:admin,moderador']);
    }





No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable