Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
75.00% covered (warning)
75.00%
15 / 20
62.50% covered (warning)
62.50%
5 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
JokePolicy
75.00% covered (warning)
75.00%
15 / 20
62.50% covered (warning)
62.50%
5 / 8
17.06
0.00% covered (danger)
0.00%
0 / 1
 viewAny
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 view
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 create
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 update
71.43% covered (warning)
71.43%
5 / 7
0.00% covered (danger)
0.00%
0 / 1
4.37
 delete
71.43% covered (warning)
71.43%
5 / 7
0.00% covered (danger)
0.00%
0 / 1
4.37
 restore
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 forceDelete
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 search
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Policies;
4
5use App\Models\Joke;
6use App\Models\User;
7
8class JokePolicy
9{
10    /**
11     * Determine whether the user can view any models.
12     * User level (100) and above can browse jokes
13     */
14    public function viewAny(User $user): bool
15    {
16        return $user->hasRole(['client', 'staff', 'admin', 'superuser']);
17    }
18
19    /**
20     * Determine whether the user can view the model.
21     * User level (100) and above can view jokes
22     */
23    public function view(User $user, Joke $joke): bool
24    {
25        return $user->hasRole(['client', 'staff', 'admin', 'superuser']);
26    }
27
28    /**
29     * Determine whether the user can create models.
30     * User level (100) and above can create jokes
31     */
32    public function create(User $user): bool
33    {
34        return $user->hasRole(['client', 'staff', 'admin', 'superuser']);
35    }
36
37    /**
38     * Determine whether the user can update the model.
39     * Users can update their own jokes, Staff+ can update any joke
40     */
41    public function update(User $user, Joke $joke): bool
42    {
43        // Admin and Superuser can update any joke
44        if ($user->hasRole(['admin', 'superuser'])) {
45            return true;
46        }
47
48        // Staff can update any joke
49        if ($user->hasRole('staff')) {
50            return true;
51        }
52
53        // Clients can only update their own jokes
54        if ($user->hasRole('client')) {
55            return $joke->user_id === $user->id;
56        }
57
58        return false;
59    }
60
61    /**
62     * Determine whether the user can delete the model.
63     * Users can delete their own jokes, Staff+ can delete any joke
64     */
65    public function delete(User $user, Joke $joke): bool
66    {
67        // Admin and Superuser can delete any joke
68        if ($user->hasRole(['admin', 'superuser'])) {
69            return true;
70        }
71
72        // Staff can delete any joke
73        if ($user->hasRole('staff')) {
74            return true;
75        }
76
77        // Clients can only delete their own jokes
78        if ($user->hasRole('client')) {
79            return $joke->user_id === $user->id;
80        }
81
82        return false;
83    }
84
85    /**
86     * Determine whether the user can restore the model.
87     * Staff level (500) and above can restore jokes
88     */
89    public function restore(User $user, Joke $joke): bool
90    {
91        return $user->hasRole(['staff', 'admin', 'superuser']);
92    }
93
94    /**
95     * Determine whether the user can permanently delete the model.
96     * Admin level (750) and above can permanently delete jokes
97     */
98    public function forceDelete(User $user, Joke $joke): bool
99    {
100        return $user->hasRole(['admin', 'superuser']);
101    }
102
103    /**
104     * Determine whether the user can search jokes.
105     * User level (100) and above can search jokes
106     */
107    public function search(User $user): bool
108    {
109        return $user->hasRole(['client', 'staff', 'admin', 'superuser']);
110    }
111}