Delete the user in a GDPR compatible way (#1151)
* Delete the user in a GDPR compatible way * Block user from calls * Style fix
This commit is contained in:
@@ -147,6 +147,7 @@ class PirepService extends Service
|
||||
$dupe_pirep = $this->findDuplicate($pirep);
|
||||
if ($dupe_pirep !== false) {
|
||||
$pirep = $dupe_pirep;
|
||||
Log::info('Found duplicate PIREP, id='.$dupe_pirep->id);
|
||||
if ($pirep->cancelled) {
|
||||
throw new \App\Exceptions\PirepCancelled($pirep);
|
||||
}
|
||||
@@ -293,9 +294,11 @@ class PirepService extends Service
|
||||
$time_limit = Carbon::now('UTC')->subMinutes($minutes)->toDateTimeString();
|
||||
|
||||
$where = [
|
||||
'user_id' => $pirep->user_id,
|
||||
'airline_id' => $pirep->airline_id,
|
||||
'flight_number' => $pirep->flight_number,
|
||||
'user_id' => $pirep->user_id,
|
||||
'airline_id' => $pirep->airline_id,
|
||||
'flight_number' => $pirep->flight_number,
|
||||
'dpt_airport_id' => $pirep->dpt_airport_id,
|
||||
'arr_airport_id' => $pirep->arr_airport_id,
|
||||
];
|
||||
|
||||
if (filled($pirep->route_code)) {
|
||||
|
||||
@@ -9,12 +9,14 @@ use App\Events\UserStatsChanged;
|
||||
use App\Exceptions\PilotIdNotFound;
|
||||
use App\Exceptions\UserPilotIdExists;
|
||||
use App\Models\Airline;
|
||||
use App\Models\Bid;
|
||||
use App\Models\Enums\PirepState;
|
||||
use App\Models\Enums\UserState;
|
||||
use App\Models\Pirep;
|
||||
use App\Models\Rank;
|
||||
use App\Models\Role;
|
||||
use App\Models\User;
|
||||
use App\Models\UserFieldValue;
|
||||
use App\Repositories\AircraftRepository;
|
||||
use App\Repositories\AirlineRepository;
|
||||
use App\Repositories\SubfleetRepository;
|
||||
@@ -23,6 +25,7 @@ use App\Support\Units\Time;
|
||||
use App\Support\Utils;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use function is_array;
|
||||
|
||||
@@ -60,14 +63,19 @@ class UserService extends Service
|
||||
*
|
||||
* @param $user_id
|
||||
*
|
||||
* @return User
|
||||
* @return User|null
|
||||
*/
|
||||
public function getUser($user_id): User
|
||||
public function getUser($user_id): ?User
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->userRepo
|
||||
->with(['airline', 'bids', 'rank'])
|
||||
->find($user_id);
|
||||
|
||||
if ($user->state === UserState::DELETED) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Load the proper subfleets to the rank
|
||||
$user->rank->subfleets = $this->getAllowableSubfleets($user);
|
||||
$user->subfleets = $user->rank->subfleets;
|
||||
@@ -117,6 +125,33 @@ class UserService extends Service
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the user. But don't actually delete them - set the name to deleted, email to
|
||||
* something random
|
||||
*
|
||||
* @param User $user
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function removeUser(User $user)
|
||||
{
|
||||
$user->name = 'Deleted User';
|
||||
$user->email = Utils::generateApiKey().'@deleted-user.com';
|
||||
$user->api_key = Utils::generateApiKey();
|
||||
$user->password = Hash::make(Utils::generateApiKey());
|
||||
$user->state = UserState::DELETED;
|
||||
$user->save();
|
||||
|
||||
// Detach all roles from this user
|
||||
$user->detachRoles($user->roles);
|
||||
|
||||
// Delete any fields which might have personal information
|
||||
UserFieldValue::where('user_id', $user->id)->delete();
|
||||
|
||||
// Remove any bids
|
||||
Bid::where('user_id', $user->id)->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a user to a given role
|
||||
*
|
||||
@@ -125,7 +160,7 @@ class UserService extends Service
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function addUserToRole(User $user, $roleName): User
|
||||
public function addUserToRole(User $user, string $roleName): User
|
||||
{
|
||||
$role = Role::where(['name' => $roleName])->first();
|
||||
$user->attachRole($role);
|
||||
|
||||
Reference in New Issue
Block a user