mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-03 14:10:57 +08:00
add disable user method
This commit is contained in:
@@ -124,4 +124,14 @@ class UserController extends Controller
|
||||
$resource = ExamResource::collection($result);
|
||||
return $this->success($resource);
|
||||
}
|
||||
|
||||
public function disable(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'uid' => 'required',
|
||||
'reason' => 'required',
|
||||
]);
|
||||
$result = $this->repository->disableUser(Auth::user(), $request->uid, $request->reason);
|
||||
return $this->success($result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Http\Middleware\Locale;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class User extends Authenticatable
|
||||
@@ -154,4 +155,13 @@ class User extends Authenticatable
|
||||
return $this->belongsTo(User::class, 'invited_by');
|
||||
}
|
||||
|
||||
public function updateWithModComment(array $update, $modComment)
|
||||
{
|
||||
if (!$this->exists) {
|
||||
throw new \RuntimeException('User not exists!');
|
||||
}
|
||||
$update['modcomment'] = DB::raw("concat_ws('\n', $modComment, modcomment)");
|
||||
return $this->update($update);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ use App\Http\Resources\UserResource;
|
||||
use App\Models\ExamUser;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
use App\Models\UserBanLog;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class UserRepository extends BaseRepository
|
||||
{
|
||||
@@ -96,4 +98,21 @@ class UserRepository extends BaseRepository
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
public function disableUser(User $operator, $uid, $reason)
|
||||
{
|
||||
$targetUser = User::query()->findOrFail(['id', 'username']);
|
||||
$banLog = [
|
||||
'uid' => $uid,
|
||||
'username' => $targetUser->username,
|
||||
'reason' => $reason,
|
||||
'operator' => $operator->id,
|
||||
];
|
||||
$modCommentText = sprintf("Disable by %s, reason: %s.", $operator->username, $reason);
|
||||
DB::transaction(function () use ($targetUser, $banLog, $modCommentText) {
|
||||
$targetUser->updateWithModComment(['enable' => User::ENABLED_NO], $modCommentText);
|
||||
UserBanLog::query()->insert($banLog);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ Route::group(['middleware' => ['auth:sanctum', 'permission', 'locale']], functio
|
||||
Route::get('user-base', [\App\Http\Controllers\UserController::class, 'base']);
|
||||
Route::get('user-classes', [\App\Http\Controllers\UserController::class, 'classes']);
|
||||
Route::get('user-match-exams', [\App\Http\Controllers\UserController::class, 'matchExams']);
|
||||
Route::post('user-disable', [\App\Http\Controllers\UserController::class, 'disable']);
|
||||
|
||||
Route::resource('exams', \App\Http\Controllers\ExamController::class);
|
||||
Route::get('exam-indexes', [\App\Http\Controllers\ExamController::class, 'indexes']);
|
||||
|
||||
Reference in New Issue
Block a user