Files
RomhackPlaza/app/Auth/XenForoUser.php

109 lines
2.4 KiB
PHP
Raw Normal View History

2026-05-20 18:25:15 +02:00
<?php
namespace App\Auth;
use App\Services\XenforoService;
use App\XenForoDataTypes\XenForoData;
2026-06-08 16:25:52 +02:00
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasName;
use Filament\Panel;
2026-05-27 21:24:38 +02:00
use Illuminate\Contracts\Auth\Access\Authorizable;
2026-05-20 18:25:15 +02:00
use Illuminate\Contracts\Auth\Authenticatable;
2026-06-08 16:25:52 +02:00
class XenForoUser extends XenForoData implements Authenticatable, Authorizable, FilamentUser, HasName {
2026-05-27 21:24:38 +02:00
use \Illuminate\Foundation\Auth\Access\Authorizable;
2026-05-20 18:25:15 +02:00
public ?array $permissions = null;
public function getAuthIdentifierName(): string
{
return 'user_id';
}
public function getAuthIdentifier(): mixed
{
return $this->data->user_id;
}
public function getAuthPasswordName(): string
{
return 'password';
}
public function getAuthPassword(): string
{
return '';
}
public function getRememberToken(): string
{
return '';
}
public function setRememberToken($value): void
{
return;
}
public function getRememberTokenName(): string
{
return '';
}
/**
* Get XenForo avatar if it exist.
*
* @param string $xfSize
*
* @return string|null
*/
public function getAvatarUrl( string $xfSize = 'm' ): ?string
{
$userId = $this->data->user_id;
$avatarDate = $this->data->avatar_date;
if( $avatarDate ){
$group = floor($userId / 1000);
return config('app.forum_url') . "/data/avatars/{$xfSize}/{$group}/{$userId}.jpg?{$avatarDate}";
}
return null;
}
2026-05-27 21:24:38 +02:00
public function _can(string $permissionGroup, string $permissionName): bool
2026-05-20 18:25:15 +02:00
{
if( !$this->permissions ){
$this->permissions = $this->services->getPermissions($this->data->user_id, $this->data->permission_combination_id);
}
return ($this->permissions[$permissionGroup][$permissionName] ?? 0) === true;
}
2026-06-08 16:25:52 +02:00
/* FILAMENT COMPATIBILITY */
public function canAccessPanel(Panel $panel): bool
{
return $this->is_admin === 1;
}
public function getFilamentName(): string
{
return $this->username ?? "XF";
}
public function getAttributeValue($key)
{
return $this->{$key} ?? null;
}
public function getKey()
{
return $this->data->user_id;
}
public function getKeyName()
{
return 'user_id';
}
2026-05-20 18:25:15 +02:00
}