Download the PHP package etm/etm_permisos without Composer

On this page you can find all versions of the php package etm/etm_permisos. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package etm_permisos

��# etmpermisos

Es un paquete que nos ayudar� al manejo de roles y permisos para laravel de manera sencilla.

## Crea tu mismo este paquete:

El paquete de Laravel/ui debe estar instalado en Laravel para que funcione correctamente este paquete.

## Instalaci�n

Ejecute en el terminal el siguiente comando:

`bash

composer require etm/etm_permisos

`

## Uso del paquete

Una vez instalado el paquete en laravel , es recomendable utilizar el siguiente comando para exportar las migraciones, archivo seeder, vistas, pol�ticas y mucho m�s:

`bash

php artisan vendor:publish --provider="etm\etm_permisos\etmPermisosServiceProvider"

`

Luego de haber ejecutado el comando anterior, vamos a revisar en la instalaci�n de laravel el siguiente archivo config/etm_permisos.php

`php

return [

'RouteRole' => 'role',

'RouteUser' => 'user',

'IdRoleDefault' => 2

];

`

En este, podremos cambiar las urls que vienen por defecto tanto para acceder a los roles como para los usuarios. Por otro lado, podremos tambi�n cambiar cual ser� el id del rol por defecto que se asignar� cuando se registre un usuario.

Si luego de realizar los cambios en el archivo de configuraci�n, no se reflejan, entonces debe ejecutar el siguiente comando en el terminal:

`bash

php artisan config:clear

`

Antes de ejecutar el comando

`bash

php artisan migrate

`

recomendamos realizar la siguiente configuraci�n en el modelo User:

`php

use Illuminate\Foundation\Auth\User as Authenticatable;

//agregamos este trait

use etm\etm_permisos\Traits\UserTrait;

class User extends Authenticatable

{

//usamos el trait

use UserTrait;

// ...

}

`

Debemos revisar el archivo seed etmPermissionInfoSeeder.php, exportado por el paquete en su instalaci�n de laravel en la siguiente ruta: database/seeds/ETMPermissionInfoSeeder.php, ya que, en este, encontrar�s lo siguiente:

- La creaci�n del usuario admin, con el correo admin@admin.com. El usuario es admin y la contrase�a es: admin.

- Creaci�n de dos roles: Rol Admin y Rol Autenticated User.

- Creaci�n de la relaci�n del rol Admin y el usuario admin.

- Creaci�n de los permisos por defecto.

Un ejemplo de lo que encontrar�s en el archivo antes mencionado para la creaci�n de permisos es la siguiente:

`php

//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;

`

Recomendamos crear los permisos adicionales que necesitas al final de este archivo con la misma estructura que la anterior.

Una vez tengas todos los permisos que necesitas, debes modificar el archivo DatabaseSeeder.php para cargar el seeder.

Adjunto un ejemplo de como debe quedar este archivo:

`php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder

{

/

* Seed the application's database.

*

* @return void

*/

public function run()

{

//$this->call(UsersTableSeeder::class);

$this->call(ETMPermissionInfoSeeder::class);

}

}

`

Ahora si podremos ejecutar el siguiente comando en el terminal

`bash

php artisan migrate --seed

`

Una vez cargadas todas las tablas a tu base de datos con todos los permisos de lugar, ya podr�s acceder a la url /role para acceder a los roles y /user para los usuarios.

## Blindar los controladores con Gates y Pol�ticas:

## Gates:

Supongamos que tenemos:

- Permisos para los roles en el archivo ETMPermissionInfoSeeder

- Un modelo llamado: Role

- Un controlador llamado: RoleController

- Un archivo blade ubicado en views/role/index.blade.php

Y supongamos que quieres validar si un usuario tiene el siguiente permiso:

`php

$permission = Permission::create([

'name' => 'Create role',

'slug' => 'role.create',

'description' => 'A user can create role',

]);

`

Para blindar (comprobar si tiene o no acceso un usuario a un m�todo) con Gates cada m�todo del controlador podemos hacerlo de dos formas:

1. Primera forma usando Gates:

`php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\JhonatanPermission\Models\Role;

use App\JhonatanPermission\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'));

}

...

}

`

2. Segunda Forma usando $this:

`php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\JhonatanPermission\Models\Role;

use App\JhonatanPermission\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'));

}

...

}

`

## Pol�ticas:

Supongamos que quieres realizar una comprobaci�n para que un usuario pueda ver los registros que ha el ha creado. Te explicaremos como hacerlo con un ejemplo puntual que este paquete trae.

1. En el archivo seed: ETMPermissionInfoSeeder.php debemos agregar los permisos que queramos, y deben contemplar esta misma estructura, pero realmente lo mas importante es el slug de los permisos, porque es con este campo que vamos a hacer la validaci�n si el usuario puede o no hacer una acci�n en el sistema, adjunto los permisos que aplican para este escenario.

`php

$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',

]);

`

2. Adjunto una muestra de como debe de realizarse la validaci�n de la pol�tica en el controlador del usuario o en el que entendamos. En nuestro caso en el UserController, pondremos los m�todos que aplica para los permisos puestos en la secci�n anterior:

- useroun.edit = editar su propio usuario

- useroun.show = ver su propio usuario

`php

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'));

}

`

3. Para que lo anterior funcione correctamente, debemos de hacer algunos ajustes en el archivo app/Providers/AuthServiceProvider.php en nuestro caso vamos a observar este archivo ubicado en src/AuthServiceProvider.php.

En el ejemplo que tiene nuestro m�dulo, nosotros queremos implementar una politica al modelo User, y por ende, ustedes observar�n que estamos usando App\User y App\Policies\UserPolicy.

`php

namespace Jhonatanfdez\JhonatanPermisos;

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�/

}

}

`

En el m�todo boot del archivo anterior, est� el coraz�n del paquete y por ende, es necesiario que este c�digo est� unicamente en este archivo y no en los archivos de Laravel.

Lo que hace este paquete es recibir dos par�metros uno para el usuario que est� logueado actualmente y el permiso que se necesita.

4. Vamos a verificar el archivo UserPolicy:

`php

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;

}

}

}

`

En el archivo anterior, encontraremos la forma correcta de como trabajar las pol�ticas en este paquete, y lo que hace es lo siguiente:

- Recibe 3 parametros:

- El usuario actual que est� logueado,

- El usuario que le estamos pasando en el cual queremos realizar la validaci�n para saber si puede o no tener el acceso

- Los permisos de la secci�n 1 de las pol�ticas.

Observemos detenidamente lo que hace el siguiente c�digo:

`php

/*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;

}

`

## Blindar en archivos Blade.

Supongamos que tenemos el siguiente permiso:

`php

$permission = Permission::create([

'name' => 'Create role',

'slug' => 'role.create',

'description' => 'A user can create role',

]);

`

En blade nosotros podemos utilizar las directivas @can y @endcan para esto. Adjunto un ejemplo de su uso:

`html

@can('haveaccess','role.create')

<a href="{{route('role.create')}}"

class="btn btn-primary float-right"

>Create

</a>

@endcan

`

Como podemos observar, solo tenemos que escribir dos parametros:

- siempre debemos usar: haveaccess como primer parametro.

- el slug del permiso que queremos validar y si tiene acceso, lo mostrar� y si no tiene acceso no lo mostrar�.

## Contribuciones

Le doy las gracias a Dios que me ayud� a crear este paquete para la comunidad.

Dios les bendiga.

## Licencia

[MIT](./LICENSE.md)


All versions of etm_permisos with dependencies

PHP Build Version
Package Version
No informations.
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package etm/etm_permisos contains the following files

Loading the files please wait ....