Role::class ]; protected $crudLabelColumn = 'name'; protected $crudValueColumn = 'id'; // stores unhashed pwd public $tmpPass = null; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function __construct($attributes = []) { self::$editableProperties = [ 'name' => [ 'label' => trans('Nom'), 'type' => CrudType::string(), 'validate' => [ 'string', 'max:255' ], 'required' => true, 'nullable' => false, 'actions' => [ CrudAction::viewAny(), CrudAction::view(), CrudAction::create(), CrudAction::update(), ] ], 'email' => [ 'label' => trans('Email'), 'type' => CrudType::email(), 'required' => true, 'nullable' => false, 'validate' => [ 'max:255', // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { $q = static::query(); if (request()->user) { $q = $q->where('id', '!=', $this->id); } if ($q->where('email', $value)->exists()) { $fail(__(':attribute est déjà utilisé', [ 'attribute' => $attribute ])); } } ], 'actions' => [ CrudAction::viewAny(), CrudAction::view(), CrudAction::create(), CrudAction::update(), ] ], 'role' => [ 'label' => trans('Role'), 'type' => CrudType::enum(), 'enum' => Role::class, 'required' => true, 'nullable' => false, 'actions' => [ CrudAction::viewAny(), CrudAction::view(), CrudAction::create(), CrudAction::update(), ] ], 'sites' => [ 'label' => trans('Projets'), 'type' => CrudType::belongsToMany(), 'belongsToMany' => Site::class, 'belongsToManyLabel' => 'name', 'nullable' => true, 'readonly' => function () { /** @var \App\Models\User */ $user = auth()->user(); return $user->isAdmin(); }, 'actions' => [ CrudAction::viewAny(), CrudAction::view(), CrudAction::create(), CrudAction::update(), ] ] ]; parent::__construct($attributes); } protected static function booted() { static::creating(function (User $user) { if (\is_null($user->password)) { $user->password = Str::random(10); $user->tmpPass = $user->password; } if (Hash::needsRehash($user->password)) { $user->password = Hash::make($user->password); } }); static::updating(function (User $user) { if (Hash::needsRehash($user->password)) { $user->password = Hash::make($user->password); } }); } public function tickets() { return $this->hasMany(Ticket::class, 'created_by'); } public function messages() { return $this->hasMany(Messages::class, 'user_id'); } public function subscriptions() { return $this->belongsToMany(Ticket::class, 'subscriptions'); } public function sites() { return $this->belongsToMany(Site::class); } public function sendMailConfirm() { dispatch(new SendUserCreatedEmail($this)); } /** * Is the user an admin or a developper ? * * @return boolean */ public function isAdmin(): bool { return ($this->role->equals(Role::developper()) or $this->role->equals(Role::admin())); } }