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; } }