Passed
Push — master ( 6da38c...408d25 )
by Andrey
17:24 queued 14:36
created

Role::assignPermission()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
ccs 0
cts 3
cp 0
crap 2
rs 10
1
<?php
2
3
namespace Helldar\Roles\Models;
4
5
use Helldar\Roles\Facades\Database\Search;
6
use Illuminate\Database\Eloquent\Model;
7
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
8
9
/**
10
 * @property \Helldar\Roles\Models\Permission[]|\Illuminate\Database\Eloquent\Collection $permissions
11
 * @property bool $is_root
12
 */
13
class Role extends BaseModel
14
{
15
    protected $fillable = ['name', 'is_root'];
16
17
    protected $casts = [
18
        'is_root' => 'boolean',
19
    ];
20
21 48
    public function permissions(): BelongsToMany
22
    {
23 48
        return $this->belongsToMany(Permission::class, 'role_permission');
24
    }
25
26
    public function createPermission(string $name): Model
27
    {
28
        return $this->permissions()->create(compact('name'));
29
    }
30
31
    /**
32
     * @param  \Helldar\Roles\Models\Permission|string  $permission
33
     *
34
     * @throws \Throwable
35
     */
36
    public function assignPermission($permission): void
37
    {
38
        $permission = $this->findPermission($permission);
39
40
        $this->permissions()->attach($permission->id);
41
    }
42
43
    /**
44
     * @param  \Helldar\Roles\Models\Permission[]|string[]  $permissions
45
     *
46
     * @throws \Throwable
47
     */
48
    public function assignPermissions(...$permissions): void
49
    {
50
        foreach ($permissions as $permission) {
51
            $this->assignPermission($permission);
0 ignored issues
show
Bug introduced by
$permission of type Helldar\Roles\Models\Permission[]|string[] is incompatible with the type Helldar\Roles\Models\Permission|string expected by parameter $permission of Helldar\Roles\Models\Role::assignPermission(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

51
            $this->assignPermission(/** @scrutinizer ignore-type */ $permission);
Loading history...
52
        }
53
    }
54
55
    /**
56
     * @param  \Helldar\Roles\Models\Permission|string  $permission
57
     *
58
     * @throws \Throwable
59
     */
60
    public function revokePermission($permission): void
61
    {
62
        $permission = $this->findPermission($permission);
63
64
        $this->permissions()->detach($permission->id);
65
    }
66
67
    /**
68
     * @param  \Helldar\Roles\Models\Permission[]|string[]  $permissions
69
     *
70
     * @throws \Throwable
71
     */
72
    public function revokePermissions(...$permissions): void
73
    {
74
        foreach ($permissions as $permission) {
75
            $this->revokePermission($permission);
0 ignored issues
show
Bug introduced by
$permission of type Helldar\Roles\Models\Permission[]|string[] is incompatible with the type Helldar\Roles\Models\Permission|string expected by parameter $permission of Helldar\Roles\Models\Role::revokePermission(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

75
            $this->revokePermission(/** @scrutinizer ignore-type */ $permission);
Loading history...
76
        }
77
    }
78
79
    /**
80
     * @param  int[]  $permissions_ids
81
     */
82 48
    public function syncPermissions(array $permissions_ids): void
83
    {
84 48
        $this->permissions()->sync($permissions_ids);
85 48
    }
86
87
    /**
88
     * @param  \Helldar\Roles\Models\Permission|string  $permission
89
     *
90
     * @return bool
91
     */
92
    public function hasPermission($permission): bool
93
    {
94
        return Search::by($this->permissions(), $permission)->exists();
0 ignored issues
show
Bug Best Practice introduced by
The expression return Helldar\Roles\Fac... $permission)->exists() could return the type Illuminate\Database\Eloq...uent\Relations\Relation which is incompatible with the type-hinted return boolean. Consider adding an additional type-check to rule them out.
Loading history...
95
    }
96
}
97