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

HasRole::can()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 2
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