feat: add admin user plugin hooks

Added hooks:

- admin.user.fetch.query

- admin.user.transform

- admin.user.detail

- admin.user.update.rules

- admin.user.update.messages

- admin.user.update.params

- admin.user.update.before

- admin.user.update.after

- admin.user.secret.reset

- admin.user.destroy.before

- admin.user.destroy.after
This commit is contained in:
xboard 2026-05-26 02:20:36 +08:00
parent 4e9dfd6018
commit 8f66a9af94
2 changed files with 49 additions and 4 deletions

View File

@ -11,6 +11,7 @@ use App\Models\Plan;
use App\Models\User;
use App\Services\AuthService;
use App\Services\NodeSyncService;
use App\Services\Plugin\HookManager;
use App\Services\UserService;
use App\Traits\QueryOperators;
use App\Utils\Helper;
@ -33,7 +34,16 @@ class UserController extends Controller
return $this->fail([400202, '用户不存在']);
$user->token = Helper::guid();
$user->uuid = Helper::guid(true);
return $this->success($user->save());
$result = $user->save();
if ($result) {
HookManager::call('admin.user.secret.reset', [
'user' => $user,
'request' => $request,
]);
}
return $this->success($result);
}
// Apply filters and sorts to the query builder.
@ -178,6 +188,8 @@ class UserController extends Controller
->select((new User())->getTable() . '.*')
->selectRaw('(u + d) as total_used');
$userModel = HookManager::filter('admin.user.fetch.query', $userModel, $request);
$this->applyFiltersAndSorts($request, $userModel);
$users = $userModel->orderBy('id', 'desc')
@ -193,11 +205,12 @@ class UserController extends Controller
// Transform user fields for API response.
public static function transformUserData(User $user): array
{
$model = $user;
$user = $user->toArray();
$user['balance'] = $user['balance'] / 100;
$user['commission_balance'] = $user['commission_balance'] / 100;
$user['subscribe_url'] = Helper::getSubscribeUrl($user['token']);
return $user;
return HookManager::filter('admin.user.transform', $user, $model);
}
public function getUserInfoById(Request $request)
@ -208,6 +221,7 @@ class UserController extends Controller
'id.required' => '用户ID不能为空'
]);
$user = User::find($request->input('id'))->load('invite_user');
$user = HookManager::filter('admin.user.detail', $user, $request);
return $this->success($user);
}
@ -257,12 +271,27 @@ class UserController extends Controller
$params['commission_balance'] = $params['commission_balance'] * 100;
}
$params = HookManager::filter('admin.user.update.params', $params, $request, $user);
HookManager::call('admin.user.update.before', [
'user' => $user,
'params' => $params,
'request' => $request,
]);
try {
$user->update($params);
} catch (\Exception $e) {
Log::error($e);
return $this->fail([500, '保存失败']);
}
HookManager::call('admin.user.update.after', [
'user' => $user->refresh(),
'params' => $params,
'request' => $request,
]);
return $this->success(true);
}
@ -664,6 +693,11 @@ class UserController extends Controller
'id.exists' => '用户不存在'
]);
$user = User::find($request->input('id'));
HookManager::call('admin.user.destroy.before', [
'user' => $user,
'request' => $request,
]);
try {
DB::beginTransaction();
$user->orders()->delete();
@ -672,6 +706,12 @@ class UserController extends Controller
$user->tickets()->delete();
$user->delete();
DB::commit();
HookManager::call('admin.user.destroy.after', [
'user' => $user,
'request' => $request,
]);
return $this->success(true);
} catch (\Exception $e) {
DB::rollBack();

View File

@ -2,6 +2,7 @@
namespace App\Http\Requests\Admin;
use App\Services\Plugin\HookManager;
use Illuminate\Foundation\Http\FormRequest;
class UserUpdate extends FormRequest
@ -13,7 +14,7 @@ class UserUpdate extends FormRequest
*/
public function rules()
{
return [
$rules = [
'id' => 'required|integer',
'email' => 'email:strict',
'password' => 'nullable|min:8',
@ -34,11 +35,13 @@ class UserUpdate extends FormRequest
'speed_limit' => 'nullable|integer',
'device_limit' => 'nullable|integer'
];
return HookManager::filter('admin.user.update.rules', $rules, $this);
}
public function messages()
{
return [
$messages = [
'email.required' => '邮箱不能为空',
'email.email' => '邮箱格式不正确',
'transfer_enable.numeric' => '流量格式不正确',
@ -65,5 +68,7 @@ class UserUpdate extends FormRequest
'speed_limit.integer' => '限速格式不正确',
'device_limit.integer' => '设备数量格式不正确'
];
return HookManager::filter('admin.user.update.messages', $messages, $this);
}
}