Passed
Push — dependabot/npm_and_yarn/dev/st... ( 917c39...79f3f4 )
by
unknown
12:32 queued 07:14
created

ApplicationPolicy::view()   B

Complexity

Conditions 8
Paths 54

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
c 0
b 0
f 0
dl 0
loc 12
rs 8.4444
cc 8
nc 54
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
            && $jobApplication->job_poster->manager->user->is($user))
27
            && $jobApplication->job_poster->isClosed();
28
        $authHr = $user->isHrAdvisor()
29
            && $user->can('manage', $jobApplication->job_poster)
30
            && $jobApplication->job_poster->isClosed();
31
32
        return $authApplicant || $authManager || $authHr;
33
    }
34
35
    /**
36
     * Determine whether the user can create jobApplications.
37
     *
38
     * @param  \App\Models\User  $user
39
     * @return mixed
40
     */
41
    public function create(User $user)
42
    {
43
        return true;
44
    }
45
46
    /**
47
     * Determine whether the user can update the jobApplication.
48
     *
49
     * @param  \App\Models\User  $user
50
     * @param  \App\JobApplication  $jobApplication
51
     * @return mixed
52
     */
53
    public function update(User $user, JobApplication $jobApplication)
54
    {
55
        return $user->isApplicant() &&
56
            $user->applicant->id === $jobApplication->applicant_id &&
57
            $jobApplication->application_status->name == 'draft' &&
58
            $jobApplication->job_poster->isOpen();
59
    }
60
61
    /**
62
     * Determine whether the user can delete the jobApplication.
63
     *
64
     * @param  \App\Models\User  $user
65
     * @param  \App\JobApplication  $jobApplication
66
     * @return mixed
67
     */
68
    public function delete(User $user, JobApplication $jobApplication)
69
    {
70
        return $user->isApplicant() &&
71
            $user->applicant->id === $jobApplication->applicant_id &&
72
            $jobApplication->application_status->name == 'draft';
73
    }
74
75
    /**
76
     * Determine whether the user can review the jobApplication.
77
     *
78
     * @param  \App\Models\User  $user
79
     * @param  \App\JobApplication  $jobApplication
80
     * @return mixed
81
     */
82
    public function review(User $user, JobApplication $jobApplication)
83
    {
84
        // Only the manager in charge of the accompanying job can review an application,
85
        // and only if it has been submitted
86
        $authManager = $user->isManager() &&
87
            $jobApplication->job_poster->manager->user->id == $user->id;
88
        $authHr = $user->isHrAdvisor() && $user->can('manage', $jobApplication->job_poster);
89
        return !$jobApplication->isDraft() && ($authManager || $authHr);
90
    }
91
}
92