Passed
Push — feature/response-screening ( e0fe27...dc9872 )
by Chris
04:25 queued 11s
created

ApplicationPolicy::view()   A

Complexity

Conditions 6
Paths 24

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 10
rs 9.2222
c 0
b 0
f 0
cc 6
nc 24
nop 2
1
<?php
2
3
namespace App\Policies;
4
5
use App\Models\User;
6
use App\Models\JobApplication;
7
use App\Policies\BasePolicy;
8
use Illuminate\Auth\Access\HandlesAuthorization;
9
10
class ApplicationPolicy extends BasePolicy
11
{
12
    use HandlesAuthorization;
13
14
    /**
15
     * Determine whether the user can view the jobApplication.
16
     *
17
     * @param  \App\Models\User  $user
18
     * @param  \App\JobApplication  $jobApplication
19
     * @return mixed
20
     */
21
    public function view(User $user, JobApplication $jobApplication)
22
    {
23
        $authApplicant = ($user->isApplicant() &&
24
            $user->applicant->id === $jobApplication->applicant_id);
25
        $authManager = $user->isManager()
26
            && $user->can('reviewApplicationsFor', $jobApplication->job_poster);
27
        $authHr = $user->isHrAdvisor()
28
            && $user->can('reviewApplicationsFor', $jobApplication->job_poster);
29
30
        return $authApplicant || $authManager || $authHr;
31
    }
32
33
    /**
34
     * Determine whether the user can create jobApplications.
35
     *
36
     * @param  \App\Models\User  $user
37
     * @return mixed
38
     */
39
    public function create(User $user)
40
    {
41
        return true;
42
    }
43
44
    /**
45
     * Determine whether the user can update the jobApplication.
46
     *
47
     * @param  \App\Models\User  $user
48
     * @param  \App\JobApplication  $jobApplication
49
     * @return mixed
50
     */
51
    public function update(User $user, JobApplication $jobApplication)
52
    {
53
        return $user->isApplicant() &&
54
            $user->applicant->id === $jobApplication->applicant_id &&
55
            $jobApplication->application_status->name == 'draft' &&
56
            $jobApplication->job_poster->isOpen();
57
    }
58
59
    /**
60
     * Determine whether the user can delete the jobApplication.
61
     *
62
     * @param  \App\Models\User  $user
63
     * @param  \App\JobApplication  $jobApplication
64
     * @return mixed
65
     */
66
    public function delete(User $user, JobApplication $jobApplication)
67
    {
68
        return $user->isApplicant() &&
69
            $user->applicant->id === $jobApplication->applicant_id &&
70
            $jobApplication->application_status->name == 'draft';
71
    }
72
73
    /**
74
     * Determine whether the user can review the jobApplication.
75
     *
76
     * @param  \App\Models\User  $user
77
     * @param  \App\JobApplication  $jobApplication
78
     * @return mixed
79
     */
80
    public function review(User $user, JobApplication $jobApplication)
81
    {
82
        // Only the manager in charge of the accompanying job can review an application,
83
        // and only if it has been submitted
84
        $authManager = $user->isManager() &&
85
            $jobApplication->job_poster->manager->user->id == $user->id;
86
        $authHr = $user->isHrAdvisor() && $user->can('manage', $jobApplication->job_poster);
87
        return !$jobApplication->isDraft() && ($authManager || $authHr);
88
    }
89
}
90