| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace App\Services;
- use App\Models\UnitInhabitantClassification;
- use App\Models\User;
- use Illuminate\Auth\Access\AuthorizationException;
- use Illuminate\Database\Eloquent\Collection;
- use Illuminate\Support\Facades\Auth;
- class UnitInhabitantClassificationService
- {
- public function findById(int $id): ?UnitInhabitantClassification
- {
- return UnitInhabitantClassification::find($id);
- }
- public function create(array $data): UnitInhabitantClassification
- {
- return UnitInhabitantClassification::create($data);
- }
- public function update(int $id, array $data): ?UnitInhabitantClassification
- {
- $model = $this->findById($id);
- if (!$model) {
- return null;
- }
- $this->authorizeUnitAccess($model->unit_id);
- $model->update($data);
- return $model->fresh();
- }
- public function delete(int $id): bool
- {
- $model = $this->findById($id);
- if (!$model) {
- return false;
- }
- $this->authorizeUnitAccess($model->unit_id);
- return $model->delete();
- }
- //
- public function getByUnit(int $unitId): Collection
- {
- $this->authorizeUnitAccess($unitId);
- return UnitInhabitantClassification::where('unit_id', $unitId)
- ->orderBy('description')
- ->get();
- }
- public function getSelectList(int $unitId): Collection
- {
- return UnitInhabitantClassification::where('unit_id', $unitId)
- ->orderBy('description')
- ->get(['id', 'description', 'acronym', 'unit_id']);
- }
- //
- private function authorizeUnitAccess(int $unitId): void
- {
- /** @var User $user */
- $user = Auth::user();
- if ($user->isAdmin()) {
- return;
- }
- $hasUnit = $user->units()->where('units.id', $unitId)->exists();
- if (!$hasUnit) {
- throw new AuthorizationException('Acesso negado: você não tem permissão para esta unidade.');
- }
- }
- }
|