66 lines
2.3 KiB
PHP
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;
|
|
}
|
|
}
|