Files
cesizen/WEB/app/Models/User.php
T
sam 7d52c1e440
CI - Intégration continue / quality-and-tests (pull_request) Successful in 3m27s
feat(tickets): suivi bidirectionnel des tickets utilisateur via Gitea
Le formulaire 'fire-and-forget' devient un vrai systeme de suivi :
- table locale tickets (user <-> numero d'issue Gitea)
- liste 'Mes tickets' avec etat (En cours / Resolu) et jalon
- page de suivi : etat, labels, jalon, fil de discussion (commentaires)
- reponse depuis le web (ajoute un commentaire sur l'issue Gitea)
- controle d'acces : un utilisateur ne voit que ses propres tickets
- GiteaIssueService etendu (getIssue, getComments, addComment)
- remplace l'ancien SuggestionController ; 5 tests de bout en bout

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 23:38:42 +02:00

74 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
/**
* @property bool $is_active
* @property-read Role|null $role
*/
class User extends Authenticatable implements FilamentUser
{
use HasApiTokens, HasFactory, Notifiable;
protected $fillable = [
'name',
'email',
'password',
'id_role',
'is_active',
];
protected $hidden = [
'password',
'remember_token',
];
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'is_active' => 'boolean',
];
}
public function role(): BelongsTo
{
return $this->belongsTo(Role::class, 'id_role');
}
public function emotionRecords(): HasMany
{
return $this->hasMany(EmotionRecord::class, 'user_id');
}
/**
* @return HasMany<Ticket, $this>
*/
public function tickets(): HasMany
{
return $this->hasMany(Ticket::class);
}
public function favoritedActivities(): BelongsToMany
{
return $this->belongsToMany(RelaxationActivity::class, 'favorites', 'id_user', 'id_activite');
}
public function canAccessPanel(Panel $panel): bool
{
// Autorise l'accès si l'utilisateur est actif et a le rôle 'Admin'
return $this->is_active && $this->role && $this->role->libelle === 'Admin';
}
}