. */ namespace FireflyIII\Support\Repositories\Administration; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\GroupMembership; use FireflyIII\Models\UserGroup; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; /** * Trait AdministrationTrait */ trait AdministrationTrait { protected ?int $administrationId = null; protected User $user; protected ?UserGroup $userGroup = null; /** * @return int */ public function getAdministrationId(): int { return $this->administrationId; } /** * @param int $administrationId * @throws FireflyException */ public function setAdministrationId(int $administrationId): void { $this->administrationId = $administrationId; $this->refreshAdministration(); } /** * @return void */ private function refreshAdministration(): void { if (null !== $this->administrationId) { $memberships = GroupMembership::where('user_id', $this->user->id) ->where('user_group_id', $this->administrationId) ->count(); if (0 === $memberships) { throw new FireflyException(sprintf('User #%d has no access to administration #%d', $this->user->id, $this->administrationId)); } $this->userGroup = UserGroup::find($this->administrationId); return; } throw new FireflyException(sprintf('Cannot validate administration for user #%d', $this->user->id)); } public function setUser(Authenticatable | User | null $user): void { if (null !== $user) { $this->user = $user; } } }