feat: add UserLevel enum and integrate it in User Modal, UserResource and UserFactory

This commit is contained in:
idevakk
2025-11-17 08:34:07 -08:00
parent bbbaf3a234
commit 23cfd0c88d
5 changed files with 235 additions and 32 deletions

View File

@@ -2,7 +2,7 @@
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\enum\UserLevel;
use Database\Factories\UserFactory;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
@@ -52,6 +52,7 @@ class User extends Authenticatable implements FilamentUser, MustVerifyEmail
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'level' => UserLevel::class,
];
}
@@ -65,7 +66,63 @@ class User extends Authenticatable implements FilamentUser, MustVerifyEmail
public function canAccessPanel(Panel $panel): bool
{
return str_ends_with($this->email, '@zemail.me') && $this->level === 9 && $this->hasVerifiedEmail();
return str_ends_with($this->email, '@zemail.me') && $this->level === UserLevel::SUPERADMIN && $this->hasVerifiedEmail();
}
/**
* Scope to query only super admin users.
*/
public function scopeIsSuperAdmin($query)
{
return $query->where('level', UserLevel::SUPERADMIN->value);
}
/**
* Scope to query only normal users.
*/
public function scopeIsNormalUser($query)
{
return $query->where('level', UserLevel::NORMALUSER->value);
}
/**
* Scope to query only banner users.
*/
public function scopeIsBannerUser($query)
{
return $query->where('level', UserLevel::BANNEDUSER->value);
}
/**
* Check if user is a super admin.
*/
public function isSuperAdmin(): bool
{
return $this->level === UserLevel::SUPERADMIN;
}
/**
* Check if user is a normal user.
*/
public function isNormalUser(): bool
{
return $this->level === UserLevel::NORMALUSER;
}
/**
* Check if user is a banner user.
*/
public function isBannerUser(): bool
{
return $this->level === UserLevel::BANNEDUSER;
}
/**
* Get user level name.
*/
public function getLevelName(): string
{
return $this->level->name;
}
public function tickets(): HasMany