UserPolicy::viewStudents()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 3
c 1
b 0
f 1
nc 2
nop 1
dl 0
loc 5
rs 10
1
<?php
2
declare(strict_types = 1);
3
4
namespace App\Policies;
5
6
use App\User;
7
use Illuminate\Auth\Access\HandlesAuthorization;
8
9
class UserPolicy
10
{
11
    use HandlesAuthorization;
12
13
    /**
14
     * Determine whether the user can view the model.
15
     *
16
     * @param  \App\User $user
17
     * @param  \App\User $model
18
     * @return bool
19
     */
20
    public function view(User $user, User $model) : bool
21
    {
22
        // Any users can view their own data.
23
        if ($user->id === $model->id) {
24
            return true;
25
        }
26
27
        $return = null;
28
29
        switch ($user->role) {
30
31
            case User::ROLE_ADMINISTRATOR;
32
                // Administrators can view any users.
33
                $return = true;
34
                break;
35
36
            case User::ROLE_VIEWER;
37
                // Viewers can view viewers and students.
38
                $return = in_array($model->role, [User::ROLE_STUDENT, User::ROLE_VIEWER]);
39
                break;
40
41
            default:
42
                $return = false;
43
44
        }
45
46
        return $return;
47
    }
48
49
    /**
50
     * Determine whether the user can view all models with student role.
51
     *
52
     * @param  \App\User $user
53
     * @return bool
54
     */
55
    public function viewStudents(User $user) : bool
56
    {
57
        return
58
            $user->role === User::ROLE_VIEWER ||
59
            $user->role === User::ROLE_ADMINISTRATOR;
60
    }
61
62
    /**
63
     * Determine whether the user can create models with viewer role.
64
     *
65
     * @param  \App\User $user
66
     * @return bool
67
     */
68
    public function createViewer(User $user) : bool
69
    {
70
        return
71
            $user->role === User::ROLE_VIEWER ||
72
            $user->role === User::ROLE_ADMINISTRATOR;
73
    }
74
75
    /**
76
     * Determine whether the user can view all models with viewer role.
77
     *
78
     * @param  \App\User $user
79
     * @return bool
80
     */
81
    public function viewViewers(User $user) : bool
82
    {
83
        return
84
            $user->role === User::ROLE_VIEWER ||
85
            $user->role === User::ROLE_ADMINISTRATOR;
86
    }
87
88
    /**
89
     * Determine whether the user can create models with administrator role.
90
     *
91
     * @param  \App\User $user
92
     * @return bool
93
     */
94
    public function createAdministrator(User $user) : bool
95
    {
96
        return $user->role === User::ROLE_ADMINISTRATOR;
97
    }
98
99
    /**
100
     * Determine whether the user can view all models with administrator role.
101
     *
102
     * @param  \App\User $user
103
     * @return bool
104
     */
105
    public function viewAdministrators(User $user) : bool
106
    {
107
        return $user->role === User::ROLE_ADMINISTRATOR;
108
    }
109
110
    /**
111
     * Determine whether the user can update the model.
112
     *
113
     * @param  \App\User $user
114
     * @param  \App\User $model
115
     * @return bool
116
     */
117
    public function update(User $user, User $model) : bool
118
    {
119
        // A user can only update its own user
120
        // or be modified by an administrator.
121
        return
122
            $user->role === User::ROLE_ADMINISTRATOR ||
123
            $user->id === $model->id;
124
    }
125
126
    /**
127
     * Determine whether the user can delete the model.
128
     *
129
     * @param  \App\User $user
130
     * @param  \App\User $model
131
     * @return bool
132
     */
133
    public function delete(User $user, User $model) : bool
134
    {
135
136
        $return = null;
137
138
        switch ($model->role) {
139
140
            case User::ROLE_ADMINISTRATOR;
141
                // Administrators can be deleted only by other administrators.
142
                $return =
143
                    $user->role === User::ROLE_ADMINISTRATOR &&
144
                    $user->id !== $model->id;
145
                break;
146
147
            case User::ROLE_VIEWER;
148
                // Viewers can be deleted only by administrators.
149
                $return = $user->role === User::ROLE_ADMINISTRATOR;
150
                break;
151
152
            case User::ROLE_STUDENT;
153
                // Students can be deleted only by viewer and administrators.
154
                $return = in_array($user->role, [User::ROLE_ADMINISTRATOR, User::ROLE_VIEWER]);
155
                break;
156
157
            default:
158
                $return = false;
159
160
        }
161
162
        return $return;
163
164
    }
165
}
166