Files
resume.een.ninja/app/Models/Scopes/UserScope.php
2025-08-03 00:01:31 +02:00

46 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models\Scopes;
use App\Models\Contracts\BelongsToUser;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Webmozart\Assert\Assert;
class UserScope implements Scope
{
public function apply(Builder $builder, Model $model): void
{
if (
! $model instanceof BelongsToUser
|| ! Auth::check()
) {
return;
}
/** @var User $user */
$user = Auth::user();
Assert::notNull($user);
$userId = $user->getKey();
$userColumnPath = $model->getUserColumnId();
if (! Str::contains($userColumnPath, '.')) {
$builder->where($model->getTable().'.'.$userColumnPath, $userId);
return;
}
$relationPath = Str::beforeLast($userColumnPath, '.');
$column = Str::afterLast($userColumnPath, '.');
$builder->whereHas($relationPath, fn (Builder $query) => $query->where($column, $userId));
}
}