use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* Class User.
*
- * @property string $id
+ * @property int $id
* @property string $name
* @property string $slug
* @property string $email
*/
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, Loggable, Sluggable
{
+ use HasFactory;
use Authenticatable;
use CanResetPassword;
use Notifiable;
*/
protected $hidden = [
'password', 'remember_token', 'system_name', 'email_confirmed', 'external_auth_id', 'email',
- 'created_at', 'updated_at', 'image_id',
+ 'created_at', 'updated_at', 'image_id', 'roles', 'avatar', 'user_id',
];
/**
* This holds the user's permissions when loaded.
- *
- * @var ?Collection
*/
- protected $permissions;
+ protected ?Collection $permissions;
+
+ /**
+ * This holds the user's avatar URL when loaded to prevent re-calculating within the same request.
+ */
+ protected string $avatarUrl = '';
/**
* This holds the default user when loaded.
*
* @var null|User
*/
- protected static $defaultUser = null;
+ protected static ?User $defaultUser = null;
/**
* Returns the default public user.
*/
- public static function getDefault(): User
+ public static function getDefault(): self
{
if (!is_null(static::$defaultUser)) {
return static::$defaultUser;
*/
public function attachDefaultRole(): void
{
- $roleId = setting('registration-role');
+ $roleId = intval(setting('registration-role'));
if ($roleId && $this->roles()->where('id', '=', $roleId)->count() === 0) {
$this->roles()->attach($roleId);
}
}
/**
- * Get all permissions belonging to a the current user.
+ * Get all permissions belonging to the current user.
*/
protected function permissions(): Collection
{
->leftJoin('permission_role', 'ru.role_id', '=', 'permission_role.role_id')
->leftJoin('role_permissions', 'permission_role.permission_id', '=', 'role_permissions.id')
->where('ru.user_id', '=', $this->id)
- ->get()
->pluck('name');
return $this->permissions;
return $default;
}
+ if (!empty($this->avatarUrl)) {
+ return $this->avatarUrl;
+ }
+
try {
$avatar = $this->avatar ? url($this->avatar->getThumb($size, $size, false)) : $default;
} catch (Exception $err) {
$avatar = $default;
}
+ $this->avatarUrl = $avatar;
+
return $avatar;
}
}
/**
- * @inheritdoc
+ * {@inheritdoc}
*/
public function logDescriptor(): string
{
}
/**
- * @inheritDoc
+ * {@inheritdoc}
*/
public function refreshSlug(): string
{