更新
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user