1). As for now you are building the query right.
2). It can be done by some other way or more laravel way as follows,
$users = User::query();
$query->when(auth()->user()->hasRole('reseller'), function($query){
$query->whereHas('company', function($q) {
$q->where('reseller', auth()->user()->company_id);
});
})
->when(auth()->user()->hasRole('supervisor'), function($query){
$query->where('company_id', auth()->user()->company_id );
});
$users = $query->paginate(10);
3). Or you can use Gates and Policies to restrict the view as per user roles, directly in your blades. Read the following referance for Gates and Policies. It is like more advance Laravel way to restrict views.
Laravel Authorization