Scope users listing and search to current company (#607)

Add scopeWhereCompany() to User model using whereHas through the
user_company pivot table. Apply it in UsersController::index() and
SearchController so users only see members of their current company.

Previously, the users page showed ALL users across all companies.

Ref #574
This commit is contained in:
Darko Gjorgjijoski
2026-04-03 14:34:33 +02:00
committed by GitHub
parent 3d871604ae
commit 7d9fdb79cc
3 changed files with 12 additions and 3 deletions

View File

@@ -25,7 +25,8 @@ class SearchController extends Controller
->paginate(10); ->paginate(10);
if ($user->isOwner()) { if ($user->isOwner()) {
$users = User::applyFilters($request->only(['search'])) $users = User::whereCompany()
->applyFilters($request->only(['search']))
->latest() ->latest()
->paginate(10); ->paginate(10);
} }

View File

@@ -25,14 +25,15 @@ class UsersController extends Controller
$user = $request->user(); $user = $request->user();
$users = User::applyFilters($request->all()) $users = User::whereCompany()
->applyFilters($request->all())
->where('id', '<>', $user->id) ->where('id', '<>', $user->id)
->latest() ->latest()
->paginate($limit); ->paginate($limit);
return UserResource::collection($users) return UserResource::collection($users)
->additional(['meta' => [ ->additional(['meta' => [
'user_total_count' => User::count(), 'user_total_count' => User::whereCompany()->count(),
]]); ]]);
} }

View File

@@ -213,6 +213,13 @@ class User extends Authenticatable implements HasMedia
return $query->where('email', 'LIKE', '%'.$email.'%'); return $query->where('email', 'LIKE', '%'.$email.'%');
} }
public function scopeWhereCompany($query)
{
return $query->whereHas('companies', function ($q) {
$q->where('company_id', request()->header('company'));
});
}
public function scopePaginateData($query, $limit) public function scopePaginateData($query, $limit)
{ {
if ($limit == 'all') { if ($limit == 'all') {