JezK
Edit File: User.php
<?php namespace App\Models; use App\Enums\UserRole; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasFactory, Notifiable, SoftDeletes; protected $fillable = [ 'name', 'email', 'password', 'avatar', 'bio', 'role', 'is_active', ]; protected $hidden = [ 'password', 'remember_token', ]; protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'role' => UserRole::class, 'is_active' => 'boolean', ]; } // ── Relationships ── public function articles(): HasMany { return $this->hasMany(Article::class); } public function media(): HasMany { return $this->hasMany(Media::class); } // ── Helpers ── public function isSuperAdmin(): bool { return $this->role === UserRole::SUPER_ADMIN; } public function isEditor(): bool { return $this->role === UserRole::EDITOR; } public function hasPermission(string $permission): bool { $permissions = $this->role->permissions(); return in_array('*', $permissions) || in_array($permission, $permissions); } public function getAvatarUrlAttribute(): string { if ($this->avatar) { return asset('storage/' . $this->avatar); } return 'https://res.cloudinary.com/dmdl9p7do/image/upload/v1781059806/Logo_Persegi_pjlvtc.png'; } }