Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
64.29% |
27 / 42 |
|
16.67% |
1 / 6 |
CRAP | |
0.00% |
0 / 1 |
| CustomHasRoles | |
64.29% |
27 / 42 |
|
16.67% |
1 / 6 |
27.66 | |
0.00% |
0 / 1 |
| hasRole | |
75.00% |
3 / 4 |
|
0.00% |
0 / 1 |
2.06 | |||
| roles | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
| assignRole | |
76.92% |
20 / 26 |
|
0.00% |
0 / 1 |
10.00 | |||
| removeRole | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
| removeAllRoles | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| isAdmin | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Traits; |
| 4 | |
| 5 | use App\Http\Models\Admin\CompanyGroup; |
| 6 | use App\Http\Models\Auth\Role; |
| 7 | use App\Http\Models\Auth\UserRole; |
| 8 | use App\Http\Models\SalesProTeamManager; |
| 9 | |
| 10 | trait CustomHasRoles |
| 11 | { |
| 12 | /** |
| 13 | * Determine if the User has the given role. |
| 14 | */ |
| 15 | public function hasRole(string $roleName): bool |
| 16 | { |
| 17 | $role = Role::firstWhere('name', trim($roleName)); |
| 18 | |
| 19 | if (empty($role)){ |
| 20 | throw new \Error('Unsupported role.'); |
| 21 | } |
| 22 | |
| 23 | return UserRole::where([['user_id', $this->id], ['role_id', $role->id]])->exists(); |
| 24 | } |
| 25 | |
| 26 | /** |
| 27 | * Retrieve roles the User has |
| 28 | */ |
| 29 | public function roles(): array |
| 30 | { |
| 31 | return UserRole::where('user_id', $this->id) |
| 32 | ->get() |
| 33 | ->pluck('role.name') |
| 34 | ->toArray(); |
| 35 | } |
| 36 | |
| 37 | /** |
| 38 | * Assign Role by name to User |
| 39 | */ |
| 40 | public function assignRole(string $roleName, array $group_ids): ?UserRole |
| 41 | { |
| 42 | if ($this->hasRole($roleName)) { |
| 43 | return null; |
| 44 | } |
| 45 | |
| 46 | $role = Role::firstWhere('name', trim($roleName)); |
| 47 | |
| 48 | $role = UserRole::create([ |
| 49 | 'user_id' => $this->id, |
| 50 | 'role_id' => $role->id, |
| 51 | ]); |
| 52 | |
| 53 | if ($role->name == Role::GROUP_ADMIN || $role->name = Role::REPORTING_ADMIN) { |
| 54 | $management_record = $this->sales_pro_team_manager; |
| 55 | if (!$management_record) { |
| 56 | $management_record = new SalesProTeamManager(); |
| 57 | $management_record->user_id = $this->id; |
| 58 | $management_record->company_id = $this->company_id; |
| 59 | $management_record->first_name = $this->first_name; |
| 60 | $management_record->last_name = $this->last_name; |
| 61 | $management_record->email = $this->email; |
| 62 | $management_record->save(); |
| 63 | } |
| 64 | |
| 65 | if (!empty($group_ids)) { |
| 66 | $groups = CompanyGroup::whereIn('_id', $group_ids)->get(); |
| 67 | if ($groups->isNotEmpty()) { |
| 68 | $management_record->groups()->sync($groups); |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | $new_group_id = !empty($group_ids) ? $group_ids[0] : null; |
| 73 | if ($this->company_group_id !== $new_group_id) { |
| 74 | $this->company_group_id = $new_group_id; |
| 75 | $this->save(); |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | return $role; |
| 80 | } |
| 81 | |
| 82 | /** |
| 83 | * Revoke the given role from the User. |
| 84 | */ |
| 85 | public function removeRole(string $roleName) : ?bool |
| 86 | { |
| 87 | if (! $this->hasRole($roleName)) { |
| 88 | return null; |
| 89 | } |
| 90 | |
| 91 | $role = Role::firstWhere('name', trim($roleName)); |
| 92 | |
| 93 | return UserRole::where([['user_id', $this->id], ['role_id', $role->id]])->delete(); |
| 94 | } |
| 95 | |
| 96 | /** |
| 97 | * Revoke all roles from the User. |
| 98 | */ |
| 99 | public function removeAllRoles() : ?bool |
| 100 | { |
| 101 | return UserRole::where('user_id', $this->id)->delete(); |
| 102 | } |
| 103 | |
| 104 | /** |
| 105 | * Check if the user is an admin |
| 106 | */ |
| 107 | public function isAdmin(): bool |
| 108 | { |
| 109 | return !empty(array_intersect( |
| 110 | $this->roles(), [Role::REPORTING_ADMIN, Role::GROUP_ADMIN, Role::GLOBAL_ADMIN, Role::VENGRESO_ADMIN]) |
| 111 | ); |
| 112 | } |
| 113 | } |