*/ protected $fillable = [ 'avatar_url', 'name', 'email', 'password', 'phone', 'parent_id', 'dob', 'gender', 'relationship', ]; /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; public function dependents(): HasMany { return $this->hasMany(User::class, 'parent_id'); } public function role(): BelongsTo { return $this->belongsTo(Role::class); } public function schedules(): HasMany { return $this->hasMany(Schedule::class, 'owner_id'); } public function clinics(): BelongsToMany { return $this->belongsToMany(Clinic::class); } // public function pets(): HasMany // { // return $this->hasMany(Pet::class, 'owner_id'); // } public function getTenants(Panel $panel): array|Collection { return $this->clinics; } public function canAccessTenant(Model $tenant): bool { return $this->clinics->contains($tenant); } public function canAccessPanel(Panel $panel): bool { $role = auth()->user()->role->name; return match ($panel->getId()) { 'admin' => $role === 'admin', 'doctor' => $role === 'doctor', 'owner' => $role === 'owner', default => false }; } public function getFilamentAvatarUrl(): ?string { return "/storage/$this->avatar_url"; } public function avatar(): Attribute { return Attribute::make( get: fn($value, $attributes) => $attributes['avatar_url'] ); } }