*/ use HasFactory; use Notifiable; use Impersonate; public $appends = ['homedir', 'systemUsername']; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'username', 'email', 'password', 'role', 'domain_limit', 'database_limit', 'ssh_access' ]; /** * The attributes that should be hidden for serialization. * * @var list */ protected $hidden = [ 'password', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'ssh_access' => 'boolean', ]; } /** * @return bool */ public function canImpersonate() { return $this->isAdmin(); } /** * @return bool */ public function isAdmin() { return $this->role === 'admin'; } /** * not using casts as it's not working in some scenarios * @return string */ public function getHomedirAttribute(): string { return '/home/' . $this->systemUsername; } /** * not using casts as it's not working in some scenarios * @return string */ public function getSystemUsernameAttribute(): string { return $this->username . '_ln'; } public function websites(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(Website::class); } }