feat: usr roles and soft deletes and filament

This commit is contained in:
2026-05-22 10:06:47 +02:00
parent 417a1bc53c
commit ad17c55564
16 changed files with 280 additions and 13 deletions
+8 -13
View File
@@ -4,6 +4,7 @@ namespace App\Models;
use App\Enums\PacePreference;
use App\Enums\PhysicalActivityLevel;
use App\Enums\UserRole;
use App\Enums\UserSex;
use App\Enums\WeightGoal;
use Filament\Models\Contracts\FilamentUser;
@@ -12,9 +13,9 @@ use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Contracts\Translation\HasLocalePreference;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
@@ -22,7 +23,7 @@ use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable implements FilamentUser, HasLocalePreference, MustVerifyEmail
{
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasApiTokens, HasFactory, HasUlids, Notifiable;
use HasApiTokens, HasFactory, HasUlids, Notifiable, SoftDeletes;
/**
* The attributes that are mass assignable.
@@ -33,6 +34,7 @@ class User extends Authenticatable implements FilamentUser, HasLocalePreference,
'name',
'email',
'locale',
'role',
'email_verified_at',
'password',
'avatar_url',
@@ -79,6 +81,7 @@ class User extends Authenticatable implements FilamentUser, HasLocalePreference,
'weight_goal' => WeightGoal::class,
'pace_preference' => PacePreference::class,
'sex' => UserSex::class,
'role' => UserRole::class,
'date_of_birth' => 'immutable_date',
];
}
@@ -103,12 +106,6 @@ class User extends Authenticatable implements FilamentUser, HasLocalePreference,
return $this->hasOne(StravaConnection::class);
}
public function likedMealPosts(): BelongsToMany
{
return $this->belongsToMany(MealPosts::class, 'meal_post_likes', 'user_id', 'meal_posts_id')
->withTimestamps();
}
public function routeNotificationForExpoPush(): array
{
return $this->deviceTokens()
@@ -122,15 +119,13 @@ class User extends Authenticatable implements FilamentUser, HasLocalePreference,
return $this->locale ?: 'en';
}
public function isAdmin()
public function isAdmin(): bool
{
return true;
// return $this->role === 'admin';
return $this->role === UserRole::ADMIN;
}
public function canAccessPanel(Panel $panel): bool
{
return true;
return $this->role === UserRole::ADMIN || $this->role === UserRole::MODERATOR;
}
}