add disable user method

This commit is contained in:
xiaomlove
2021-05-14 02:11:57 +08:00
parent 0742ed33f8
commit 6d3068eb8c
4 changed files with 40 additions and 0 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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']);