Решил в итоге не мудрить сильно, т.к. время очень ограничено, запилил в модель пользователя функции, которые через join'ы вытаскивают id всех сущностей, связанных с пользователями через несколько таблиц
public function stores(){
return Store::join('branches', 'stores.branch_id', '=', 'branches.id')->
join('user_branches', 'branches.id', '=', 'user_branches.branch_id')->
join('users', 'user_branches.user_id', '=', 'users.id')->
select('stores.id as id')->
where('users.id', $this->id);
}
public function rates(){
return Rate::join('stores', 'rates.store_id', '=', 'stores.id')->
join('branches', 'stores.branch_id', '=', 'branches.id')->
join('user_branches', 'branches.id', '=', 'user_branches.branch_id')->
join('users', 'user_branches.user_id', '=', 'users.id')->
select('rates.id as id')->
where('users.id', $this->id);
}
и добаивл фильтр по id
->whereIn('id', Auth::user()->rates()->pluck('id'))