Files
laravel-backend/app/Repositories/User.php
Joris Slagter df155bb13d
Some checks failed
continuous-integration/drone/push Build is failing
Initial Laravel API import
- Complete GGZ Ecademy Laravel backend application
- RESTful API for learning products, members, filters
- Authentication and authorization system
- Database migrations and seeders
- Custom CRUD generator commands
- Email notification system
- Integration with frontend applications
2025-12-02 17:40:21 +01:00

127 lines
2.8 KiB
PHP

<?php
namespace App\Repositories;
use Laravel\Sanctum\HasApiTokens;
use Spatie\MediaLibrary\HasMedia;
use Illuminate\Notifications\Notifiable;
use Spatie\MediaLibrary\InteractsWithMedia;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Notifications\PasswordResetNotification;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements HasMedia
{
use HasApiTokens, Notifiable, InteractsWithMedia;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'first_name', 'last_name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
protected $appends = [
'fullName',
'isMemberEditor',
'isAdmin',
'isOperator',
'isUser',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function hasAnyRoles($roles)
{
return $this->roles()->whereIn('name', $roles)->first() ? true : false;
}
public function hasRole($role)
{
return $this->roles()->where('name', $role)->first() ? true : false;
}
public function members()
{
return $this->belongsToMany(Member::class, 'member_users');
}
public function getIsMemberEditorAttribute()
{
return $this->members->count() > 0;
}
public function registerMediaCollections(): void
{
$this
->addMediaCollection('profile_pics')
->singleFile();
}
public function registerMediaConversions(Media $media = null): void
{
$this->addMediaConversion('thumb')
->width(50)
->height(50);
}
public function sendPasswordResetNotification($token)
{
$this->notify(new PasswordResetNotification($token));
}
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
public function getIsSuperAdminAttribute()
{
return $this->hasRole('super_admin');
}
public function getIsAdminAttribute()
{
return $this->hasRole('admin');
}
public function getIsOperatorAttribute()
{
return $this->hasRole('operator');
}
public function getIsUserAttribute()
{
return $this->hasRole('user');
}
// public function setPasswordAttribute($password)
// {
// $this->attributes['password'] = bcrypt($password);
// }
}