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
+21 -5
View File
@@ -162,12 +162,15 @@ class UserRepository extends BaseRepository
return User::listClass(); 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']); $targetUser = User::query()->findOrFail($uid, ['id', 'enabled', 'username', 'class']);
if ($targetUser->enabled == User::ENABLED_NO) { if ($targetUser->enabled == User::ENABLED_NO) {
throw new NexusException('Already disabled !'); throw new NexusException('Already disabled !');
} }
if (empty($reason)) {
$reason = nexus_trans("user.disable_by_admin");
}
$this->checkPermission($operator, $targetUser); $this->checkPermission($operator, $targetUser);
$banLog = [ $banLog = [
'uid' => $uid, 'uid' => $uid,
@@ -519,9 +522,13 @@ class UserRepository extends BaseRepository
return true; 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 = [ $tables = [
'users' => 'id', 'users' => 'id',
'hit_and_runs' => 'uid', 'hit_and_runs' => 'uid',
@@ -530,9 +537,18 @@ class UserRepository extends BaseRepository
'exam_progress' => 'uid', 'exam_progress' => 'uid',
]; ];
foreach ($tables as $table => $key) { 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; return true;
} }
+13 -8
View File
@@ -664,10 +664,14 @@ function docleanup($forceAll = 0, $printProgress = false) {
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));
\App\Models\User::query() $users = \App\Models\User::query()
->where('enabled', 'no') ->where('enabled', 'no')
->where("last_access","<", $dt) ->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"; $log = "destroy disabled accounts";
do_log($log); do_log($log);
@@ -1037,12 +1041,13 @@ function docleanup($forceAll = 0, $printProgress = false) {
} }
//remove duplicate user ban logs //remove duplicate user ban logs
$log = "clear user ban log duplicate"; //No need to do that, disable + destroy will have two records, sometimes disable will enable again
\App\Models\UserBanLog::clearUserBanLogDuplicate(); // $log = "clear user ban log duplicate";
do_log($log); // \App\Models\UserBanLog::clearUserBanLogDuplicate();
if ($printProgress) { // do_log($log);
printProgress($log); // if ($printProgress) {
} // printProgress($log);
// }
$log = 'Full cleanup is done'; $log = 'Full cleanup is done';
do_log($log); do_log($log);
+1 -1
View File
@@ -1,6 +1,6 @@
<?php <?php
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.7.30'); 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('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");
+1
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_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_not_parked' => 'Disable inactive user accounts, not parked.',
'disable_user_parked' => 'Disable inactive user accounts, parked.', 'disable_user_parked' => 'Disable inactive user accounts, parked.',
'destroy_disabled_account' => 'Timed physical deletion of disabled accounts',
]; ];
+2
View File
@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => 'Staff Leader', \App\Models\User::CLASS_STAFF_LEADER => 'Staff Leader',
], ],
'change_username_lte_min_interval' => 'Last change time: :last_change_time, unmet minimum interval: :interval days', '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',
]; ];
+1
View File
@@ -7,4 +7,5 @@ return [
'disable_user_no_transfer_alt_register_time' => '封禁非活跃的无流量账号,由注册时间时间断定.', 'disable_user_no_transfer_alt_register_time' => '封禁非活跃的无流量账号,由注册时间时间断定.',
'disable_user_not_parked' => '定时封禁未挂起的非活跃账号.', 'disable_user_not_parked' => '定时封禁未挂起的非活跃账号.',
'disable_user_parked' => '定时封禁已挂起的非活跃账号.', 'disable_user_parked' => '定时封禁已挂起的非活跃账号.',
'destroy_disabled_account' => '定时物理删除已封禁账号',
]; ];
+2
View File
@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => '主管', \App\Models\User::CLASS_STAFF_LEADER => '主管',
], ],
'change_username_lte_min_interval' => '上次修改时间::last_change_time,未满足最小间隔::interval 天', 'change_username_lte_min_interval' => '上次修改时间::last_change_time,未满足最小间隔::interval 天',
'destroy_by_admin' => '被管理员物理删除',
'disable_by_admin' => '被管理員封禁',
]; ];
+1
View File
@@ -7,4 +7,5 @@ return [
'disable_user_no_transfer_alt_register_time' => '封禁非活躍的無流量賬號,由註冊時間時間斷定.', 'disable_user_no_transfer_alt_register_time' => '封禁非活躍的無流量賬號,由註冊時間時間斷定.',
'disable_user_not_parked' => '定時封禁未掛起的非活躍賬號.', 'disable_user_not_parked' => '定時封禁未掛起的非活躍賬號.',
'disable_user_parked' => '定時封禁已掛起的非活躍賬號.', 'disable_user_parked' => '定時封禁已掛起的非活躍賬號.',
'destroy_disabled_account' => '定時物理刪除已封禁賬號',
]; ];
+2
View File
@@ -27,4 +27,6 @@ return [
\App\Models\User::CLASS_STAFF_LEADER => '主管', \App\Models\User::CLASS_STAFF_LEADER => '主管',
], ],
'change_username_lte_min_interval' => '上次修改時間::last_change_time,未滿足最小間隔::interval 天', 'change_username_lte_min_interval' => '上次修改時間::last_change_time,未滿足最小間隔::interval 天',
'destroy_by_admin' => '被管理員物理刪除',
'disable_by_admin' => '被管理员封禁',
]; ];