Completed
Push — develop ( de93ba...d1354f )
by Enea
05:07
created

HasRole   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Test Coverage

Coverage 8.69%

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 6
dl 0
loc 50
ccs 2
cts 23
cp 0.0869
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A locateByName() 0 5 2
A can() 0 4 1
A cannot() 0 4 1
A grant() 0 4 1
A syncGrant() 0 4 1
A revoke() 0 4 1
A syncRevoke() 0 4 1
A permissions() 0 4 1
A getPermissionModels() 0 4 1
1
<?php
2
/**
3
 * Created on 11/02/18 by enea dhack.
4
 */
5
6
namespace Enea\Authorization\Traits;
7
8
use Enea\Authorization\Contracts\PermissionContract;
9
use Enea\Authorization\Contracts\RoleContract;
10
use Enea\Authorization\Facades\Authorizer;
11
use Enea\Authorization\Facades\Granter;
12
use Enea\Authorization\Facades\Revoker;
13
use Enea\Authorization\Support\Config;
14
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
15
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
16
17
/**
18
 * Trait HasRole.
19
 *
20
 * @package Enea\Authorization\Traits
21
 *
22
 * @property EloquentCollection permissions
23
 */
24
trait HasRole
25
{
26
    use Grantable;
27
28
    public static function locateByName(string $secretName): ?RoleContract
29
    {
30
        $role = static::query()->where('secret_name', $secretName)->first();
31
        return $role instanceof RoleContract ? $role : null;
32
    }
33
34
    public function can(string $permission): bool
35
    {
36
        return Authorizer::can($this, $permission);
37
    }
38
39
    public function cannot(string $permission): bool
40
    {
41
        return ! $this->can($permission);
42
    }
43
44
    public function grant(PermissionContract $permission): void
45
    {
46
        $this->syncGrant([$permission]);
47
    }
48
49
    public function syncGrant(array $permissions): void
50
    {
51
        Granter::permissions($this, collect($permissions));
52
    }
53
54
    public function revoke(PermissionContract $permission): void
55
    {
56
        $this->syncRevoke([$permission]);
57
    }
58
59
    public function syncRevoke(array $permissions): void
60
    {
61
        Revoker::permissions($this, collect($permissions));
62
    }
63
64 18
    public function permissions(): BelongsToMany
65
    {
66 18
        return $this->belongsToMany(Config::permissionModel(), Config::rolePermissionTableName(), 'role_id', 'permission_id');
67
    }
68
69
    public function getPermissionModels(): EloquentCollection
70
    {
71
        return $this->permissions;
72
    }
73
}
74