Files
SGF/app/Shared/Context/BelongsToCompany.php
T

37 lines
1.3 KiB
PHP

<?php
namespace App\Shared\Context;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
trait BelongsToCompany
{
protected static function bootBelongsToCompany(): void
{
static::addGlobalScope('company', function (Builder $query): void {
foreach (app(CompanyContext::class)->identifiers() as $column => $value) {
$query->where($query->getModel()->qualifyColumn($column), $value);
}
});
static::saving(function (Model $model): void {
foreach (app(CompanyContext::class)->identifiers() as $column => $value) {
if ($model->getAttribute($column) !== null && (int) $model->getAttribute($column) !== $value) {
throw new AccessDeniedHttpException('Contexto de empresa incompatível.');
}
$model->setAttribute($column, $value);
}
});
static::deleting(function (Model $model): void {
foreach (app(CompanyContext::class)->identifiers() as $column => $value) {
if ((int) $model->getAttribute($column) !== $value) {
throw new AccessDeniedHttpException('Contexto de empresa incompatível.');
}
}
});
}
}