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

View File

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