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