Deploy Ladill Queue / deploy (push) Successful in 28s
Poll displays every 1.2s with client-side TTS ack; expose service API for sibling apps; redesign tickets, counters, and staff console. Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
2.0 KiB
PHP
72 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\Concerns;
|
|
|
|
use App\Models\Member;
|
|
use App\Models\Organization;
|
|
use App\Services\Qms\OrganizationResolver;
|
|
use App\Services\Qms\QmsPermissions;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\Request;
|
|
|
|
trait ScopesApiToAccount
|
|
{
|
|
protected function isServiceRequest(Request $request): bool
|
|
{
|
|
return $request->attributes->get('service_caller') !== null;
|
|
}
|
|
|
|
protected function ownerRef(Request $request): string
|
|
{
|
|
if ($this->isServiceRequest($request)) {
|
|
$owner = trim((string) ($request->input('owner') ?? $request->query('owner', '')));
|
|
abort_if($owner === '', 422, 'The owner parameter is required.');
|
|
|
|
return $owner;
|
|
}
|
|
|
|
return (string) $request->user()->public_id;
|
|
}
|
|
|
|
protected function organization(Request $request): Organization
|
|
{
|
|
if ($this->isServiceRequest($request)) {
|
|
$organization = Organization::owned($this->ownerRef($request))->first();
|
|
abort_unless($organization, 404, 'Queue organization not found.');
|
|
|
|
return $organization;
|
|
}
|
|
|
|
$organization = app(OrganizationResolver::class)->resolveForUser($request->user());
|
|
abort_unless($organization, 404);
|
|
|
|
return $organization;
|
|
}
|
|
|
|
protected function member(Request $request): ?Member
|
|
{
|
|
if ($this->isServiceRequest($request)) {
|
|
return null;
|
|
}
|
|
|
|
return app(OrganizationResolver::class)->memberFor($request->user(), $this->organization($request));
|
|
}
|
|
|
|
protected function authorizeAbility(Request $request, string $ability): void
|
|
{
|
|
if ($this->isServiceRequest($request)) {
|
|
return;
|
|
}
|
|
|
|
abort_unless(
|
|
app(QmsPermissions::class)->can($this->member($request), $ability),
|
|
403,
|
|
);
|
|
}
|
|
|
|
protected function authorizeOwner(Request $request, Model $model): void
|
|
{
|
|
abort_unless($model->getAttribute('owner_ref') === $this->ownerRef($request), 404);
|
|
}
|
|
}
|