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
+10
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);
}
}
+10
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);
}
}
+19
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;
}
}