Completed
Push — develop ( 9259d7...818a8c )
by Abdelrahman
01:45
created

UserPolicy   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 63
rs 10
wmc 9
lcom 1
cbo 3

4 Methods

Rating   Name   Duplication   Size   Complexity  
A list() 0 4 1
A create() 0 4 1
A update() 0 6 3
A delete() 0 7 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cortex\Fort\Policies;
6
7
use Rinvex\Fort\Models\User;
8
use Illuminate\Auth\Access\HandlesAuthorization;
9
10
class UserPolicy
11
{
12
    use HandlesAuthorization;
13
14
    /**
15
     * Determine whether the user can list users.
16
     *
17
     * @param string                   $ability
18
     * @param \Rinvex\Fort\Models\User $user
19
     *
20
     * @return bool
21
     */
22
    public function list($ability, User $user): bool
23
    {
24
        return $user->allAbilities->pluck('slug')->contains($ability);
25
    }
26
27
    /**
28
     * Determine whether the user can create users.
29
     *
30
     * @param string                   $ability
31
     * @param \Rinvex\Fort\Models\User $user
32
     *
33
     * @return bool
34
     */
35
    public function create($ability, User $user): bool
36
    {
37
        return $user->allAbilities->pluck('slug')->contains($ability);
38
    }
39
40
    /**
41
     * Determine whether the user can update the user.
42
     *
43
     * @param string                   $ability
44
     * @param \Rinvex\Fort\Models\User $user
45
     * @param \Rinvex\Fort\Models\User $resource
46
     *
47
     * @return bool
48
     */
49
    public function update($ability, User $user, User $resource): bool
50
    {
51
        return $user->allAbilities->pluck('slug')->contains($ability)   // User can update users
52
               && ! $resource->isSuperadmin()                           // RESOURCE user is NOT superadmin
53
               && ! $resource->isProtected();                           // RESOURCE user is NOT protected
54
    }
55
56
    /**
57
     * Determine whether the user can delete the user.
58
     *
59
     * @param string                   $ability
60
     * @param \Rinvex\Fort\Models\User $user
61
     * @param \Rinvex\Fort\Models\User $resource
62
     *
63
     * @return bool
64
     */
65
    public function delete($ability, User $user, User $resource): bool
66
    {
67
        return $user->allAbilities->pluck('slug')->contains($ability)   // User can delete users
68
               && $resource->getKey() !== $user->getKey()               // User can NOT delete himself
69
               && ! $resource->isSuperadmin()                           // RESOURCE user is NOT superadmin
70
               && ! $resource->isProtected();                           // RESOURCE user is NOT protected
71
    }
72
}
73