physical delete acount write to ban log

This commit is contained in:
xiaomlove
2022-10-23 18:26:03 +08:00
parent 0486a316fe
commit 8016f2b6de
9 changed files with 44 additions and 14 deletions

View File

@@ -162,12 +162,15 @@ class UserRepository extends BaseRepository
return User::listClass();
}
public function disableUser(User $operator, $uid, $reason)
public function disableUser(User $operator, $uid, $reason = '')
{
$targetUser = User::query()->findOrFail($uid, ['id', 'enabled', 'username', 'class']);
if ($targetUser->enabled == User::ENABLED_NO) {
throw new NexusException('Already disabled !');
}
if (empty($reason)) {
$reason = nexus_trans("user.disable_by_admin");
}
$this->checkPermission($operator, $targetUser);
$banLog = [
'uid' => $uid,
@@ -519,9 +522,13 @@ class UserRepository extends BaseRepository
return true;
}
public function destroy($id)
public function destroy($id, $reasonKey = 'user.destroy_by_admin')
{
user_can('user-delete', true);
if (!isRunningInConsole()) {
user_can('user-delete', true);
}
$uidArr = Arr::wrap($id);
$users = User::query()->with('language')->whereIn('id', $uidArr)->get(['id', 'username', 'lang']);
$tables = [
'users' => 'id',
'hit_and_runs' => 'uid',
@@ -530,9 +537,18 @@ class UserRepository extends BaseRepository
'exam_progress' => 'uid',
];
foreach ($tables as $table => $key) {
\Nexus\Database\NexusDB::table($table)->where($key, $id)->delete();
\Nexus\Database\NexusDB::table($table)->whereIn($key, $uidArr)->delete();
}
do_log("[DESTROY_USER]: $id", 'error');
do_log("[DESTROY_USER]: " . json_encode($uidArr), 'error');
$userBanLogs = [];
foreach ($users as $user) {
$userBanLogs[] = [
'uid' => $user->id,
'username' => $user->username,
'reason' => nexus_trans($reasonKey, [], $user->locale)
];
}
UserBanLog::query()->insert($userBanLogs);
return true;
}

View File

@@ -664,10 +664,14 @@ function docleanup($forceAll = 0, $printProgress = false) {
if ($destroyDisabledDays > 0) {
$secs = $destroyDisabledDays*24*60*60;
$dt = date("Y-m-d H:i:s",(TIMENOW - $secs));
\App\Models\User::query()
$users = \App\Models\User::query()
->where('enabled', 'no')
->where("last_access","<", $dt)
->delete();
->get(['id']);
if ($users->isNotEmpty()) {
$userRep = new \App\Repositories\UserRepository();
$userRep->destroy($users->pluck('id')->toArray(), 'cleanup.destroy_disabled_account');
}
}
$log = "destroy disabled accounts";
do_log($log);
@@ -1037,12 +1041,13 @@ function docleanup($forceAll = 0, $printProgress = false) {
}
//remove duplicate user ban logs
$log = "clear user ban log duplicate";
\App\Models\UserBanLog::clearUserBanLogDuplicate();
do_log($log);
if ($printProgress) {
printProgress($log);
}
//No need to do that, disable + destroy will have two records, sometimes disable will enable again
// $log = "clear user ban log duplicate";
// \App\Models\UserBanLog::clearUserBanLogDuplicate();
// do_log($log);
// if ($printProgress) {
// printProgress($log);
// }
$log = 'Full cleanup is done';
do_log($log);

View File

@@ -1,6 +1,6 @@
<?php
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.7.30');
defined('RELEASE_DATE') || define('RELEASE_DATE', '2022-10-22');
defined('RELEASE_DATE') || define('RELEASE_DATE', '2022-10-23');
defined('IN_TRACKER') || define('IN_TRACKER', false);
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");

View File

@@ -7,4 +7,5 @@ return [
'disable_user_no_transfer_alt_register_time' => 'Disable inactive user accounts, no transfer. Alt: register time.',
'disable_user_not_parked' => 'Disable inactive user accounts, not parked.',
'disable_user_parked' => 'Disable inactive user accounts, parked.',
'destroy_disabled_account' => 'Timed physical deletion of disabled accounts',
];

View File

@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => 'Staff Leader',
],
'change_username_lte_min_interval' => 'Last change time: :last_change_time, unmet minimum interval: :interval days',
'destroy_by_admin' => 'Physical delete by administrator',
'disable_by_admin' => 'Disable by administrator',
];

View File

@@ -7,4 +7,5 @@ return [
'disable_user_no_transfer_alt_register_time' => '封禁非活跃的无流量账号,由注册时间时间断定.',
'disable_user_not_parked' => '定时封禁未挂起的非活跃账号.',
'disable_user_parked' => '定时封禁已挂起的非活跃账号.',
'destroy_disabled_account' => '定时物理删除已封禁账号',
];

View File

@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => '主管',
],
'change_username_lte_min_interval' => '上次修改时间::last_change_time未满足最小间隔:interval 天',
'destroy_by_admin' => '被管理员物理删除',
'disable_by_admin' => '被管理員封禁',
];

View File

@@ -7,4 +7,5 @@ return [
'disable_user_no_transfer_alt_register_time' => '封禁非活躍的無流量賬號,由註冊時間時間斷定.',
'disable_user_not_parked' => '定時封禁未掛起的非活躍賬號.',
'disable_user_parked' => '定時封禁已掛起的非活躍賬號.',
'destroy_disabled_account' => '定時物理刪除已封禁賬號',
];

View File

@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => '主管',
],
'change_username_lte_min_interval' => '上次修改時間::last_change_time未滿足最小間隔:interval 天',
'destroy_by_admin' => '被管理員物理刪除',
'disable_by_admin' => '被管理员封禁',
];