'datetime', 'password' => 'hashed', 'role' => Role::class, ]; } public function profile(): HasOne { return $this->hasOne(\App\Models\Profile::class); } public function petaniDibuat(): HasMany { return $this->hasMany(Petani::class, 'created_by'); } protected static function booted(): void { static::deleting(function (User $user) { if ($user->isForceDeleting()) { return; } $user->koordinatorKomoditas()->get()->each->delete(); }); } public function koordinatorKomoditas(): HasMany { return $this->hasMany(KoordinatorKomoditas::class, 'user_id'); } public function isKoordinator(): bool { return $this->role === Role::KOORDINATOR; } // Daftar id komoditas yang ditugaskan ke koordinator ini. public function komoditasKoordinatorIds(): array { return $this->koordinatorKomoditas()->pluck('komoditas_id')->all(); } // Koordinator hanya boleh mengakses petani dengan komoditas utama yang ditugaskan. // Role lain tidak dibatasi di sini (aturannya tetap di masing-masing controller). public function bolehAksesPetani(Petani $petani): bool { if (! $this->isKoordinator()) { return true; } return in_array($petani->komoditas_id, $this->komoditasKoordinatorIds()); } }