Instalacion y uso de componente Entrust en Laravel 5.2

En esta guia haremos el uso del componente Entrust que sirve para administrar roles y permisos de los usuarios de nuestra aplicacion.

    • Añadimos la siguiente linea a nuestro composer.json y realizar un composer update
       "zizaco/entrust": "dev-laravel-5" 
    • Agregamos en el archivo config/app.php
Zizaco\Entrust\EntrustServiceProvider::class, //dentro del array providers
'Entrust'   => \Zizaco\Entrust\EntrustFacade::class, //dentro del array aliases
    • Agregar los 3 middlewares que nos trae por defecto el componente en nuestro archivo app/Http/Kernel.php dentro del array $routeMiddleware
    'role' => Zizaco\Entrust\Middleware\EntrustRole::class,
    'permission' => Zizaco\Entrust\Middleware\EntrustPermission::class,
    'ability' => Zizaco\Entrust\Middleware\EntrustAbility::class,
    • Configurar el componente para el acceso a la BD, ejecutar en la terminal el siguiente comando
 php artisan vendor:publish 

Este comando generará un archivo entrust.php dentro de config/entrust.php y pasamos a configurarlo

'role' => '\App\Role', //agregamos el namespace del modelo Role
'permission' => '\App\Permission', //agregamos el namespace del modelo Permission
    • Generar la migraciones y tablas
 php artisan entrust:migration 

Este comando generará un archivo dentro de database/migrations/_entrust_setup_tables.php y luego ejecutar

 php artisan migrate 

Este comando nos creara 4 tablas en la BD ya relacionadas con la tabla users: roles, permissions, role_user, permissions_role

    • Crear los modelos Role, Permissions y establecer las relaciones

Modelo Role

 <?php namespace App;

use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{
   protected $fillable = [
        'name',
        'display_name',
        'description'
    ];
   
   //establecemos las relacion de muchos a muchos con el modelo User, ya que un rol 
   //lo pueden tener varios usuarios y un usuario puede tener varios roles
   public function users(){
        return $this->belongsToMany('App\User');
    }
}

Modelo Permissions

 <?php namespace App;

use Zizaco\Entrust\EntrustPermission;

class Permission extends EntrustPermission
{
   protected $fillable = [
        'name',
        'display_name',
        'description'
    ];

   //establecemos las relacion de muchos a muchos con el modelo Role, ya que un permiso
   //lo pueden tener varios roles y un rol puede tener varios permisos
   public function roles(){
        return $this->belongsToMany('App\Role');
    }
}
    • Agregar el trait de Entrust al modelo User y añadir las relaciones

Modelo User

<?php

namespace App;

use App\Http\Requests\Request;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class User extends Authenticatable
{
    use EntrustUserTrait; //hacemos uso del trait en la clase User para hacer uso de sus métodos
    
    protected $fillable = [
        'username', 'email', 'password'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    //establecemos las relaciones con el modelo Role, ya que un usuario puede tener varios roles
    //y un rol lo pueden tener varios usuarios
    public function roles(){
        return $this->belongsToMany('App\Role');
    }

}

La segunad parte del post Aqui