Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
96.30% covered (success)
96.30%
26 / 27
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
CheckCompanyAdmin
96.30% covered (success)
96.30%
26 / 27
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 1
 handle
96.30% covered (success)
96.30%
26 / 27
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Http\Middleware;
4
5use App\Http\Models\Admin\CompanyGroup;
6use App\Http\Models\Auth\Role;
7use App\Http\Models\Auth\User;
8use App\Traits\CompanyTrait;
9use Closure;
10use Illuminate\Http\Request;
11
12class CheckCompanyAdmin
13{
14    use CompanyTrait;
15
16    public function handle(Request $request, Closure $next)
17    {
18        $slug = $request->route('slug');
19        $user = auth()->user();
20        $roles = $user->role;
21        $role = role($roles);
22
23        if (! $user instanceof User) {
24            return response()->json(['error' => 'Unauthorized user'], 403);
25        }
26
27        $company = $this->getCompanyBySlug($slug);
28
29        if (! $company) {
30            return response()->json(['error' => 'Company not found'], 404);
31        }
32
33        if ($user->company_id !== $company->id && $role !== Role::VENGRESO_ADMIN) {
34            return response()->json(['error' => 'Unauthorized user'], 403);
35        }
36
37        $salesProManager = $user->sales_pro_team_manager()->latest()->first();
38
39        $groupIdsAdmin = $salesProManager
40            ? $salesProManager->groups()->pluck('_id')->toArray()
41            : [];
42
43        $subgroups = CompanyGroup::where('company_id', $company->id)
44            ->whereIn('parent_id', $groupIdsAdmin)
45            ->get()
46            ->pluck('_id')
47            ->toArray();
48
49        $groupIdsAdmin = array_merge($groupIdsAdmin, $subgroups);
50
51        $request->merge(['company_id' => $company->id]);
52        $request->merge(['company' => $company]);
53        $request->merge(['current_role' => $role]);
54        $request->merge(['company_group_id' => $user->company_group?->id]);
55        $request->merge(['admin_group_ids' => $groupIdsAdmin]);
56
57        return $next($request);
58    }
59}