Skip to content

Trait

O HasPermissionsTrait é peça fundamental do nosso pacote, com as principais funções para o controle de acesso.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
namespace App\Traits;

use App\Models\Permission;
use App\Models\Role;

trait HasPermissionsTrait {

   public function roles() {
      return $this->belongsToMany(Role::class,'user_role');

   }

   public function permissions() {
      return $this->belongsToMany(Permission::class,'user_permission');

   }

    // ROLES

    // Parâmetro: roles. Ex: $user->hasRole('admin', 'super')
    // Checar se o user atual detem uma das roles especificadas
    // Retorno: true/false
   public function hasRole( ... $roles ) {
       foreach ($roles as $role) {
       if ($this->roles->contains('slug', $role)) {
             return true;
          }
       }
       return false;
    }

    protected function getAllRoles(array $roles) {
        return Role::whereIn('slug',$roles)->get();    
    }

    // Criar uma role a ser gravada em 'roles'
    // Parâmetros: $name e $slug da role a ser criada
    // Sem retorno, grava e mostra na tela a role criada
    public function createRole($name, $slug){
        $role = Role::create([
            'name' => $name,
            'slug' => $slug
        ]);
        return $role;
    }

    // Parâmetro: roles. Ex: $user->giveRolesTo('editor','author')// as roles já devem estar em 'roles' e serão atribuidas ao user locado
    // Atribuir roles para o user atual, gravadas na tabela user_role
    // Sem retorno. Grava as roles na tabela user_role para o user atual
    public function giveRolesTo(... $roles) {
       $roles = $this->getAllRoles($roles);
       if($roles === null) {
          return $this;
       }
       $this->roles()->saveMany($roles);
       return $this;
    }

    // Remove uma ou mais roles do user atual, que estão em user_role
    // Parãmetros: roles. Ex: $user->deleteRoles('admin', 'user')
    // Sem retorno. Grava as informações na tabela e mostra na tela dados do suer atual
    public function deleteRoles( ... $roles ) {
       $roles = $this->getAllRoles($roles);
       $this->roles()->detach($roles);
       return $this;
    }

    // PERMISSIONS

    protected function hasPermission($permission) {
       return (bool) $this->permissions->where('slug', $permission)->count();
    }

    // Parâmetro: permission. $user->hasPermissionThroughRole('clients-index'). As permissões devem estar em 'permisions'
    // Checar se o user atual detem a permission citada
    // Retorno true/false
    public function hasPermissionThroughRole($permission) {
        foreach ($permission->roles as $role){
          if($this->roles->contains($role)) {
            return true;
          }
        }
        return false;
    }

    // Parâmetro: permission. $user->hasPermissionTo('clients-index'). As permissões devem estar em 'permisions'
    // Checar se o user atual detem a permission citada
    // Retorno true/false
    public function hasPermissionTo($permission) {
       return (bool) $this->hasPermissionThroughRole($permission) || $this->hasPermission($permission);
    }

    // Criar uma permission a ser gravada em 'permissions'
    // Parâmetros: $name e $slug da permission a ser criada
    // Sem retorno, grava e mostra na tela a permission criada
    public function createPermission($name, $slug){
        $permission = Permission::create([
            'name' => $name,
            'slug' => $slug
        ]);
        return $permission;
    }

    protected function getAllPermissions(array $permissions) {
        return Permission::whereIn('slug',$permissions)->get();    
    }

    // Parâmetro: $permissions. Ex: $user->givePermissionsTo('clients-index','clients-edit')// as permissões já devem estar em 'permissions'
    // Grava permissões para o user atual, na tabela user_permission
    // Sem retorno. Grava as permissões na tabela user_permission para o user atual
    public function givePermissionsTo(... $permissions) {
       $permissions = $this->getAllPermissions($permissions);
       if($permissions === null) {
          return $this;
       }
       $this->permissions()->saveMany($permissions);
       return $this;
    }

    // Remove uma ou mais permissões do user atual, que estão em user_permission
    // Parãmetros: permissions. Ex: $user->deletePermissions('clients-index', 'clients-edit')
    // Sem retorno. Grava as informações na tabela e mostra na tela dados do suer atual
    public function deletePermissions( ... $permissions ) {
       $permissions = $this->getAllPermissions($permissions);
       $this->permissions()->detach($permissions);
       return $this;
    }
}