Thank you.
<?php
namespace App;
use App\Permissions\HasPermissionsTrait;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, HasPermissionsTrait;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function annonces()
{
return $this->hasMany(Annonce::class);
}
}
This the trait
<?php
namespace App\Permissions;
use App\{Role, Permission};
trait HasPermissionsTrait
{
public function hasRole(... $roles)
{
foreach($roles as $role){
if($this->roles->contains('name', $role)){
return true;
}
}
return false;
}
public function givePermissionTo(... $permissions)
{
$permissions = $this->getPermissions(array_flatten($permissions));
if ($permissions === null) {
return $this;
}
$this->permissions()->saveMany($permissions);
return $this;
}
public function revokePermissionTo(... $permissions)
{
$permissions = $this->getPermissions(array_flatten($permissions));
$this->permissions()->detach($permissions);
return $this;
}
public function updatePermissions(...$permissions)
{
//detach all
$this->permissions()->detach();
return $this->givePermissionTo($permissions);
}
protected function getPermissions(array $permissions)
{
return Permission::WhereIn('name', $permissions)->get();
}
public function hasPermissionTo($permission)
{
return $this->hasPermissionRole($permission) || $this->hasPermission($permission);
}
//vérifie si un rôle à la permission de faire une action
protected function hasPermissionRole($permission)
{
foreach($permission->roles as $role){
if($this->roles->contains($role)){
return true;
}
}
return false;
}
protected function hasPermission($permission)
{
return (bool) $this->permissions->where('name', $permission->name)->count();
}
public function roles()
{
return $this->belongsToMany(Role::class, 'users_roles');
}
public function permissions()
{
return $this->belongsToMany(Permission::class, 'users_permissions');
}
}
<?php
namespace App\Permissions;
use App\{Role, Permission};
trait HasPermissionsTrait
{
public function hasRole(... $roles)
{
foreach($roles as $role){
if($this->roles->contains('name', $role)){
return true;
}
}
return false;
}
public function givePermissionTo(... $permissions)
{
$permissions = $this->getPermissions(array_flatten($permissions));
if ($permissions === null) {
return $this;
}
$this->permissions()->saveMany($permissions);
return $this;
}
public function revokePermissionTo(... $permissions)
{
$permissions = $this->getPermissions(array_flatten($permissions));
$this->permissions()->detach($permissions);
return $this;
}
public function updatePermissions(...$permissions)
{
//detach all
$this->permissions()->detach();
return $this->givePermissionTo($permissions);
}
protected function getPermissions(array $permissions)
{
return Permission::WhereIn('name', $permissions)->get();
}
public function hasPermissionTo($permission)
{
return $this->hasPermissionRole($permission) || $this->hasPermission($permission);
}
//vérifie si un rôle à la permission de faire une action
protected function hasPermissionRole($permission)
{
foreach($permission->roles as $role){
if($this->roles->contains($role)){
return true;
}
}
return false;
}
protected function hasPermission($permission)
{
return (bool) $this->permissions->where('name', $permission->name)->count();
}
public function roles()
{
return $this->belongsToMany(Role::class, 'users_roles');
}
public function permissions()
{
return $this->belongsToMany(Permission::class, 'users_permissions');
}
}<?php
namespace App\Permissions;
use App\{Role, Permission};
trait HasPermissionsTrait
{
public function hasRole(... $roles)
{
foreach($roles as $role){
if($this->roles->contains('name', $role)){
return true;
}
}
return false;
}
protected function hasPermission($permission)
{
return (bool) $this->permissions->where('name', $permission->name)->count();
}
public function roles()
{
return $this->belongsToMany(Role::class, 'users_roles');
}
public function permissions()
{
return $this->belongsToMany(Permission::class, 'users_permissions');
}
}<?php
namespace App\Permissions;
use App\{Role, Permission};
trait HasPermissionsTrait
{
public function hasRole(... $roles)
{
foreach($roles as $role){
if($this->roles->contains('name', $role)){
return true;
}
}
return false;
}
public function roles()
{
return $this->belongsToMany(Role::class, 'users_roles');
}
}
and this is the role model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function permissions()
{
return $this->belongsToMany(Permission::class, 'roles_permissions');
}
}