feat: autorisations

This commit is contained in:
2026-05-16 15:15:44 +02:00
parent 425d0d2498
commit 276978128d
7 changed files with 133 additions and 1 deletions
@@ -0,0 +1,50 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\DeviceTokenRequest;
use App\Models\DeviceToken;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class DeviceTokenController extends Controller
{
public function store(DeviceTokenRequest $request): JsonResponse
{
$data = $request->validated();
$deviceToken = DeviceToken::updateOrCreate(
['expo_push_token' => $data['expo_push_token']],
[
'platform' => $data['platform'] ?? null,
'user_id' => $request->user()->getKey(),
],
);
return response()->json([
'message' => $deviceToken->wasRecentlyCreated
? 'Token appareil enregistré.'
: 'Token appareil mis à jour.',
'deviceToken' => [
'id' => $deviceToken->id,
'expoPushToken' => $deviceToken->expo_push_token,
'platform' => $deviceToken->platform,
],
], $deviceToken->wasRecentlyCreated ? 201 : 200);
}
public function destroy(Request $request): Response
{
$data = $request->validate([
'expo_push_token' => ['required', 'string', 'max:255'],
]);
DeviceToken::query()
->where('user_id', $request->user()->getKey())
->where('expo_push_token', $data['expo_push_token'])
->delete();
return response()->noContent();
}
}
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class DeviceTokenRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'expo_push_token' => ['required', 'string', 'max:255'],
'platform' => ['nullable', 'string', 'in:ios,android,web'],
];
}
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class DeviceToken extends Model
{
protected $fillable = [
'user_id',
'expo_push_token',
'platform',
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
+6
View File
@@ -7,6 +7,7 @@ use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
@@ -53,6 +54,11 @@ class User extends Authenticatable implements FilamentUser
}
public function deviceTokens(): HasMany
{
return $this->hasMany(DeviceToken::class);
}
public function isAdmin()
{
return true;