|
@@ -7,6 +7,7 @@ use App\Components\IP;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use App\Http\Requests\Admin\UserStoreRequest;
|
|
|
use App\Http\Requests\Admin\UserUpdateRequest;
|
|
|
+use App\Jobs\VNet\getUser;
|
|
|
use App\Models\Level;
|
|
|
use App\Models\Node;
|
|
|
use App\Models\Order;
|
|
@@ -27,7 +28,6 @@ use Str;
|
|
|
|
|
|
class UserController extends Controller
|
|
|
{
|
|
|
- // 用户列表
|
|
|
public function index(Request $request)
|
|
|
{
|
|
|
$query = User::with('subscribe');
|
|
@@ -82,23 +82,6 @@ class UserController extends Controller
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
- // 添加账号页面
|
|
|
- public function create()
|
|
|
- {
|
|
|
- if (Auth::getUser()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
|
|
|
- $roles = Role::all()->pluck('description', 'name');
|
|
|
- } elseif (Auth::getUser()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
|
|
|
- $roles = Auth::getUser()->roles()->pluck('description', 'name');
|
|
|
- }
|
|
|
-
|
|
|
- return view('admin.user.info', [
|
|
|
- 'levels' => Level::orderBy('level')->get(),
|
|
|
- 'userGroups' => UserGroup::orderBy('id')->get(),
|
|
|
- 'roles' => $roles ?? null,
|
|
|
- ]);
|
|
|
- }
|
|
|
-
|
|
|
- // 添加账号
|
|
|
public function store(UserStoreRequest $request): JsonResponse
|
|
|
{
|
|
|
$data = $request->validated();
|
|
@@ -139,8 +122,7 @@ class UserController extends Controller
|
|
|
return Response::json(['status' => 'fail', 'message' => '添加失败']);
|
|
|
}
|
|
|
|
|
|
- // 编辑账号页面
|
|
|
- public function edit(User $user)
|
|
|
+ public function create()
|
|
|
{
|
|
|
if (Auth::getUser()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
|
|
|
$roles = Role::all()->pluck('description', 'name');
|
|
@@ -149,69 +131,28 @@ class UserController extends Controller
|
|
|
}
|
|
|
|
|
|
return view('admin.user.info', [
|
|
|
- 'user' => $user->load('inviter:id,username'),
|
|
|
'levels' => Level::orderBy('level')->get(),
|
|
|
'userGroups' => UserGroup::orderBy('id')->get(),
|
|
|
'roles' => $roles ?? null,
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
- // 编辑账号
|
|
|
- public function update(UserUpdateRequest $request, User $user)
|
|
|
+ public function edit(User $user)
|
|
|
{
|
|
|
- $data = $request->validated();
|
|
|
- $data['passwd'] = $request->input('passwd') ?? Str::random();
|
|
|
- $data['vmess_id'] = $data['uuid'] ?? Str::uuid();
|
|
|
- Arr::forget($data, ['roles', 'uuid', 'password']);
|
|
|
- $data['transfer_enable'] *= GB;
|
|
|
- $data['enable'] = $data['status'] < 0 ? 0 : $data['enable'];
|
|
|
- $data['expired_at'] = $data['expired_at'] ?? date('Y-m-d', strtotime('365 days'));
|
|
|
- $data['remark'] = str_replace(['atob', 'eval'], '', $data['remark']);
|
|
|
-
|
|
|
- // 只有超级管理员才能赋予超级管理员
|
|
|
- $roles = $request->input('roles');
|
|
|
- try {
|
|
|
- if (isset($roles)) {
|
|
|
- $adminUser = Auth::getUser();
|
|
|
- if ($adminUser->can('give roles') || $adminUser->hasRole('Super Admin')
|
|
|
- || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin'))) {
|
|
|
- $user->syncRoles($roles);
|
|
|
- }
|
|
|
- } else {
|
|
|
- $user->roles()->detach();
|
|
|
- }
|
|
|
-
|
|
|
- // Input checking for dummy
|
|
|
- if ($data['enable'] === '1') {
|
|
|
- if ($data['status'] === '-1' || $data['transfer_enable'] === 0 || $data['expired_at'] < date('Y-m-d')) {
|
|
|
- $data['enable'] = 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 非演示环境才可以修改管理员密码
|
|
|
- $password = $request->input('password');
|
|
|
- if (! empty($password) && ! (config('app.demo') && $user->id === 1)) {
|
|
|
- $data['password'] = $password;
|
|
|
- }
|
|
|
-
|
|
|
- // 写入用户流量变动记录
|
|
|
- if ($user->transfer_enable !== $data['transfer_enable']) {
|
|
|
- Helpers::addUserTrafficModifyLog($user->id, null, $user->transfer_enable, $data['transfer_enable'], '后台手动编辑用户');
|
|
|
- }
|
|
|
-
|
|
|
- if ($user->update($data)) {
|
|
|
- return Response::json(['status' => 'success', 'message' => '编辑成功']);
|
|
|
- }
|
|
|
- } catch (Exception $e) {
|
|
|
- Log::error('编辑用户信息异常:'.$e->getMessage());
|
|
|
-
|
|
|
- return Response::json(['status' => 'fail', 'message' => '编辑用户信息错误:'.$e->getMessage()]);
|
|
|
+ if (Auth::getUser()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
|
|
|
+ $roles = Role::all()->pluck('description', 'name');
|
|
|
+ } elseif (Auth::getUser()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
|
|
|
+ $roles = Auth::getUser()->roles()->pluck('description', 'name');
|
|
|
}
|
|
|
|
|
|
- return Response::json(['status' => 'fail', 'message' => '编辑失败']);
|
|
|
+ return view('admin.user.info', [
|
|
|
+ 'user' => $user->load('inviter:id,username'),
|
|
|
+ 'levels' => Level::orderBy('level')->get(),
|
|
|
+ 'userGroups' => UserGroup::orderBy('id')->get(),
|
|
|
+ 'roles' => $roles ?? null,
|
|
|
+ ]);
|
|
|
}
|
|
|
|
|
|
- // 删除用户
|
|
|
public function destroy(User $user)
|
|
|
{
|
|
|
if ($user->id === 1) {
|
|
@@ -231,7 +172,6 @@ class UserController extends Controller
|
|
|
return Response::json(['status' => 'fail', 'message' => '删除失败']);
|
|
|
}
|
|
|
|
|
|
- // 批量生成账号
|
|
|
public function batchAddUsers()
|
|
|
{
|
|
|
try {
|
|
@@ -247,7 +187,6 @@ class UserController extends Controller
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 转换成某个用户的身份
|
|
|
public function switchToUser(User $user): JsonResponse
|
|
|
{
|
|
|
// 存储当前管理员ID,并将当前登录信息改成要切换的用户的身份信息
|
|
@@ -257,7 +196,6 @@ class UserController extends Controller
|
|
|
return Response::json(['status' => 'success', 'message' => '身份切换成功']);
|
|
|
}
|
|
|
|
|
|
- // 重置用户流量
|
|
|
public function resetTraffic(User $user): JsonResponse
|
|
|
{
|
|
|
try {
|
|
@@ -271,7 +209,60 @@ class UserController extends Controller
|
|
|
return Response::json(['status' => 'success', 'message' => '流量重置成功']);
|
|
|
}
|
|
|
|
|
|
- // 操作用户余额
|
|
|
+ public function update(UserUpdateRequest $request, User $user)
|
|
|
+ {
|
|
|
+ $data = $request->validated();
|
|
|
+ $data['passwd'] = $request->input('passwd') ?? Str::random();
|
|
|
+ $data['vmess_id'] = $data['uuid'] ?? Str::uuid();
|
|
|
+ Arr::forget($data, ['roles', 'uuid', 'password']);
|
|
|
+ $data['transfer_enable'] *= GB;
|
|
|
+ $data['enable'] = $data['status'] < 0 ? 0 : $data['enable'];
|
|
|
+ $data['expired_at'] = $data['expired_at'] ?? date('Y-m-d', strtotime('365 days'));
|
|
|
+ $data['remark'] = str_replace(['atob', 'eval'], '', $data['remark']);
|
|
|
+
|
|
|
+ // 只有超级管理员才能赋予超级管理员
|
|
|
+ $roles = $request->input('roles');
|
|
|
+ try {
|
|
|
+ if (isset($roles)) {
|
|
|
+ $adminUser = Auth::getUser();
|
|
|
+ if ($adminUser->can('give roles') || $adminUser->hasRole('Super Admin')
|
|
|
+ || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin'))) {
|
|
|
+ $user->syncRoles($roles);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $user->roles()->detach();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Input checking for dummy
|
|
|
+ if ($data['enable'] === '1') {
|
|
|
+ if ($data['status'] === '-1' || $data['transfer_enable'] === 0 || $data['expired_at'] < date('Y-m-d')) {
|
|
|
+ $data['enable'] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 非演示环境才可以修改管理员密码
|
|
|
+ $password = $request->input('password');
|
|
|
+ if (! empty($password) && ! (config('app.demo') && $user->id === 1)) {
|
|
|
+ $data['password'] = $password;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入用户流量变动记录
|
|
|
+ if ($user->transfer_enable !== $data['transfer_enable']) {
|
|
|
+ Helpers::addUserTrafficModifyLog($user->id, null, $user->transfer_enable, $data['transfer_enable'], '后台手动编辑用户');
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($user->update($data)) {
|
|
|
+ return Response::json(['status' => 'success', 'message' => '编辑成功']);
|
|
|
+ }
|
|
|
+ } catch (Exception $e) {
|
|
|
+ Log::error('编辑用户信息异常:'.$e->getMessage());
|
|
|
+
|
|
|
+ return Response::json(['status' => 'fail', 'message' => '编辑用户信息错误:'.$e->getMessage()]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return Response::json(['status' => 'fail', 'message' => '编辑失败']);
|
|
|
+ }
|
|
|
+
|
|
|
public function handleUserCredit(Request $request, User $user): JsonResponse
|
|
|
{
|
|
|
$amount = $request->input('amount');
|
|
@@ -282,7 +273,7 @@ class UserController extends Controller
|
|
|
|
|
|
// 加减余额
|
|
|
if ($user->updateCredit($amount)) {
|
|
|
- Helpers::addUserCreditLog($user->id, null, $user->credit - $amount, $user->credit, $amount, '后台手动充值'); // 写入余额变动日志
|
|
|
+ Helpers::addUserCreditLog($user->id, null, $user->credit - $amount, $user->credit, $amount, $request->input('description') ?? '后台手动充值'); // 写入余额变动日志
|
|
|
|
|
|
return Response::json(['status' => 'success', 'message' => '充值成功']);
|
|
|
}
|
|
@@ -290,7 +281,6 @@ class UserController extends Controller
|
|
|
return Response::json(['status' => 'fail', 'message' => '充值失败']);
|
|
|
}
|
|
|
|
|
|
- // 导出配置信息
|
|
|
public function export(User $user)
|
|
|
{
|
|
|
return view('admin.user.export', [
|
|
@@ -312,4 +302,16 @@ class UserController extends Controller
|
|
|
|
|
|
return view('admin.user.oauth', compact('list'));
|
|
|
}
|
|
|
+
|
|
|
+ public function VNetInfo(User $user)
|
|
|
+ {
|
|
|
+ $nodes = $user->nodes()->whereType(4)->get(['node.id', 'node.name']);
|
|
|
+ $nodeList = (new getUser())->existsinVNet($user);
|
|
|
+
|
|
|
+ foreach ($nodes as $node) {
|
|
|
+ $node->avaliable = in_array($node->id, $nodeList, true) ? '✔️' : '❌';
|
|
|
+ }
|
|
|
+
|
|
|
+ return Response::json(['status' => 'success', 'data' => $nodes]);
|
|
|
+ }
|
|
|
}
|