improve user destroy

This commit is contained in:
lgb
2024-03-21 11:09:25 +08:00
parent 5371363123
commit 9f211df038
3 changed files with 27 additions and 13 deletions
+18 -5
View File
@@ -17,6 +17,7 @@ use App\Models\UsernameChangeLog;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Nexus\Database\NexusDB; use Nexus\Database\NexusDB;
@@ -623,13 +624,21 @@ class UserRepository extends BaseRepository
return true; return true;
} }
public function destroy($id, $reasonKey = 'user.destroy_by_admin') public function destroy(Collection|int $id, $reasonKey = 'user.destroy_by_admin')
{ {
if (!isRunningInConsole()) { if (!isRunningInConsole()) {
user_can('user-delete', true); user_can('user-delete', true);
} }
$uidArr = Arr::wrap($id); if (is_int($id)) {
$users = User::query()->with('language')->whereIn('id', $uidArr)->get(['id', 'username', 'lang']); $uidArr = Arr::wrap($id);
$users = User::query()->with('language')->whereIn('id', $uidArr)->get(['id', 'username', 'lang']);
} else {
$users = $id;
$uidArr = $users->pluck('id')->toArray();
}
if (empty($uidArr)) {
return;
}
$tables = [ $tables = [
'users' => 'id', 'users' => 'id',
'hit_and_runs' => 'uid', 'hit_and_runs' => 'uid',
@@ -641,6 +650,8 @@ class UserRepository extends BaseRepository
'attendance' => 'uid', 'attendance' => 'uid',
'attendance_logs' => 'uid', 'attendance_logs' => 'uid',
'login_logs' => 'uid', 'login_logs' => 'uid',
'oauth_access_tokens' => 'user_id',
'oauth_auth_codes' => 'user_id',
]; ];
foreach ($tables as $table => $key) { foreach ($tables as $table => $key) {
\Nexus\Database\NexusDB::table($table)->whereIn($key, $uidArr)->delete(); \Nexus\Database\NexusDB::table($table)->whereIn($key, $uidArr)->delete();
@@ -655,8 +666,10 @@ class UserRepository extends BaseRepository
]; ];
} }
UserBanLog::query()->insert($userBanLogs); UserBanLog::query()->insert($userBanLogs);
do_action("user_delete", $id); if (is_int($id)) {
fire_event("user_destroyed", $id); do_action("user_delete", $id);
fire_event("user_destroyed", $id);
}
return true; return true;
} }
+7 -6
View File
@@ -670,18 +670,19 @@ function docleanup($forceAll = 0, $printProgress = false) {
} }
//destroy disabled accounts //destroy disabled accounts
$userRep = new \App\Repositories\UserRepository();
$destroyDisabledDays = get_setting('account.destroy_disabled'); $destroyDisabledDays = get_setting('account.destroy_disabled');
if ($destroyDisabledDays > 0) { if ($destroyDisabledDays > 0) {
$secs = $destroyDisabledDays*24*60*60; $secs = $destroyDisabledDays*24*60*60;
$dt = date("Y-m-d H:i:s",(TIMENOW - $secs)); $dt = date("Y-m-d H:i:s",(TIMENOW - $secs));
$users = \App\Models\User::query() \App\Models\User::query()
->where('enabled', 'no') ->where('enabled', 'no')
->where("last_access","<", $dt) ->where("last_access","<", $dt)
->get(['id']); ->select(['id', 'username', 'lang'])
if ($users->isNotEmpty()) { ->orderBy("id", "asc")
$userRep = new \App\Repositories\UserRepository(); ->chunk(2000, function (\Illuminate\Support\Collection $users) use ($userRep) {
$userRep->destroy($users->pluck('id')->toArray(), 'cleanup.destroy_disabled_account'); $userRep->destroy($users, 'cleanup.destroy_disabled_account');
} });
} }
$log = "destroy disabled accounts"; $log = "destroy disabled accounts";
do_log($log); do_log($log);
+2 -2
View File
@@ -1,6 +1,6 @@
<?php <?php
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.9'); defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.10');
defined('RELEASE_DATE') || define('RELEASE_DATE', '2024-03-18'); defined('RELEASE_DATE') || define('RELEASE_DATE', '2024-03-21');
defined('IN_TRACKER') || define('IN_TRACKER', false); defined('IN_TRACKER') || define('IN_TRACKER', false);
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP"); defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org"); defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");