PHP code example of luisrolespermisos / luispermisos
1. Go to this page and download the library: Download luisrolespermisos/luispermisos library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Illuminate\Foundation\Auth\User as Authenticatable;
//agregamos este trait
use LuisRolesPermisos\LuisPermisos\Traits\UserTrait;
class User extends Authenticatable
{
//usamos el trait
use UserTrait;
// ...
}
//permission role
$permission = Permission::create([
'name' => 'List role',
'slug' => 'role.index',
'description' => 'A user can list role',
]);
$permission_all[] = $permission->id;
$permission = Permission::create([
'name' => 'Show role',
'slug' => 'role.show',
'description' => 'A user can see role',
]);
$permission_all[] = $permission->id;
$permission = Permission::create([
'name' => 'Create role',
'slug' => 'role.create',
'description' => 'A user can create role',
]);
$permission_all[] = $permission->id;
$permission = Permission::create([
'name' => 'Edit role',
'slug' => 'role.edit',
'description' => 'A user can edit role',
]);
$permission_all[] = $permission->id;
$permission = Permission::create([
'name' => 'Destroy role',
'slug' => 'role.destroy',
'description' => 'A user can destroy role',
]);
$permission_all[] = $permission->id;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
//$this->call(UsersTableSeeder::class);
$this->call(LuisPermissionInfoSeeder::class);
}
}
$permission = Permission::create([
'name' => 'Create role',
'slug' => 'role.create',
'description' => 'A user can create role',
]);
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\LuisPermission\Models\Role;
use App\LuisPermission\Models\Permission;
//Añadimos el facades Gate
use Illuminate\Support\Facades\Gate;
class RoleController extends Controller
{
...
public function create()
{
//Con gate revisamos si el usuario actual tiene acceso al permiso que tiene el slug: role.create
Gate::authorize('haveaccess','role.create');
$permissions = Permission::get();
return view('role.create', compact('permissions'));
}
...
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\LuisPermission\Models\Role;
use App\LuisPermission\Models\Permission;
class RoleController extends Controller
{
...
public function create()
{
//con $this revisamos si el usuario actual tiene acceso al permiso que tiene el slug: role.create
$this->authorize('haveaccess','role.create');
$permissions = Permission::get();
return view('role.create', compact('permissions'));
}
...
}
$permission = Permission::create([
'name' => 'Show own user',
'slug' => 'userown.show',
'description' => 'A user can see own user',
]);
$permission_all[] = $permission->id;
$permission = Permission::create([
'name' => 'Edit own user',
'slug' => 'userown.edit',
'description' => 'A user can edit own user',
]);
public function show(User $user)
{
/*
Aquí estamos trabajando con las políticas y por ende, estamos
realizando dos validaciones: 1, con el user.show (En este lo que
logramos es que si tienen el acceso global user.show puede ver
todos los usuarios incluyendo su propio usuario) y 2, userown.show
(En el cual vamos a validar si no tiene el user.show, va a revisar
si tiene como segundo permiso el userown.show y si lo tiene, el
podrá ver su propio usuario, de lo contrario, le mostrará acceso denegado).
*/
$this->authorize('view', [$user, ['user.show','userown.show'] ]);
$roles= Role::orderBy('name')->get();
//return $roles;
return view('user.view', compact('roles', 'user'));
}
...
public function edit(User $user)
{
/*
Aquí estamos trabajando con las políticas y por ende, estamos
realizando dos validaciones: 1, con el user.edit (En este lo que
logramos es que si tienen el acceso global user.edit puede editar
todos los usuarios incluyendo su propio usuario) y 2, userown.edit
(En el cual vamos a validar si no tiene el user.edit, va a revisar
si tiene como segundo permiso el userown.edit y si lo tiene, el
podrá editar su propio usuario, de lo contrario, le mostrará
acceso denegado).
*/
$this->authorize('update', [$user, ['user.edit','userown.edit'] ]);
$roles= Role::orderBy('name')->get();
//return $roles;
return view('user.edit', compact('roles', 'user'));
}
namespace LuisRolesPermisos\LuisPermisos;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use App\User; //debemos agregar el modelo que vamos a usar
use App\Policies\UserPolicy; //debemos agregar una política
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
/*
Debemos decirle a laravel que la política:
UserPolicy se va a aplicar al modelo User.
*/
User::class => UserPolicy::class,
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
/*Desde aquí*/
$this->registerPolicies();
Gate::define('haveaccess', function (User $user, $perm){
//dd($perm);
return $user->havePermission($perm);
//return $perm;
});
/*Hasta aquí*/
}
}
namespace App\Policies;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserPolicy
{
use HandlesAuthorization;
...
public function update(User $usera, User $user, $perm=null)
{
if ($usera->havePermission($perm[0])){
return true;
}else
if ($usera->havePermission($perm[1])){
return $usera->id === $user->id;
}
else {
return false;
}
}
...
public function view(User $usera, User $user, $perm=null)
{
if ($usera->havePermission($perm[0])){
return true;
}else
if ($usera->havePermission($perm[1])){
return $usera->id === $user->id;
}
else {
return false;
}
}
}
/*confirmamos si tiene el acceso global como por ejemplo user.edit y si lo tiene retorno true para que me permita el acceso
*/
if ($usera->havePermission($perm[0])){
return true;
}
/* de lo contrario, si tiene el acceso userown.edit, el cual es usuado
para saber si el usuario puede editar su propio registro, entonces
hacemos una validación para saber si el usuario que está logueado
puede está accediendo a su propio registro. Si es igual el id del usuario
entonces retornará true y lo dejará pasar, si no es igual
retornará false.
*/
else if ($usera->havePermission($perm[1])){
return $usera->id === $user->id;
}
else {
return false;
}
$permission = Permission::create([
'name' => 'Create role',
'slug' => 'role.create',
'description' => 'A user can create role',
]);