Files
chat/backend/app/service/UserContextService.php
2026-07-22 10:18:59 +08:00

66 lines
2.3 KiB
PHP

<?php
namespace app\service;
use app\model\Role;
use app\model\User;
use app\service\PermissionCatalog;
class UserContextService
{
public static function formatAuthUser(User $user): array
{
$user = User::with(['membership', 'roleModel', 'department'])->find($user->id);
if (!$user) {
return [];
}
$level = $user->membership;
$role = $user->roleModel;
$department = $user->department;
$permissions = PermissionCatalog::normalize($role?->permissions ?? []);
if (($user->role ?? '') === 'admin' && (!$role || ($role->slug ?? '') === 'super_admin')) {
$permissions = PermissionCatalog::fullPermissions();
}
return [
'id' => $user->id,
'username' => $user->username,
'email' => $user->email,
'nickname' => $user->nickname,
'avatar' => $user->avatar,
'is_guest' => str_starts_with($user->username, 'guest_'),
'role' => $user->role,
'role_id' => $user->role_id,
'role_slug' => $role?->slug,
'role_name' => $role?->name,
'role_permissions' => $permissions,
'department_id' => $user->department_id,
'department_name' => $department?->name,
'status' => $user->status,
'membership_level_id' => $user->membership_level_id,
'membership_name' => $level?->name,
'membership_slug' => $level?->slug,
'max_conversations' => $level?->max_conversations ?? 20,
'max_messages_per_day' => $level?->max_messages_per_day ?? 50,
'max_upload_size_mb' => $level?->max_upload_size_mb ?? 5,
'membership_permissions' => $level?->permissions ?? [],
];
}
public static function formatPublicUser(int $userId): array
{
$user = User::with(['membership', 'roleModel', 'department'])->find($userId);
if (!$user) {
return [];
}
$data = self::formatAuthUser($user);
unset($data['status']);
return $data;
}
}