Scope project user payloads to visible users #42

Merged
Twyco merged 4 commits from koda/pr37-visible-users into codex/api-application-access 2026-04-22 08:57:57 +00:00
Showing only changes of commit c9a3a7f58d - Show all commits
+14 -8
View File
@@ -4,13 +4,14 @@ namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Actions\Permissions\PermissionService;
use App\Enums\Permission;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@@ -76,12 +77,17 @@ class User extends Authenticatable
{
$permissionService = app(PermissionService::class);
return $query->where(function (Builder $builder) use ($permissionService, $project): void {
foreach (User::query()->select('id')->cursor() as $candidate) {
if ($permissionService->allows($candidate, \App\Enums\Permission::ProjectRead, $project)) {
$builder->orWhereKey($candidate->id);
}
}
});
$allowedUserIds = User::query()
->select('id')
->cursor()
->filter(fn (User $candidate) => $permissionService->allows(
$candidate,
Permission::ProjectRead,
$project
))
->pluck('id')
->all();
return $query->whereKey($allowedUserIds);
}
}