PMCORE-4147

This commit is contained in:
Paula Quispe
2023-02-15 09:11:38 -04:00
parent 19f077b754
commit 99734449fd
6 changed files with 629 additions and 448 deletions

View File

@@ -24,6 +24,14 @@ use ListParticipatedLast;
use OauthClients;
use PMmemcached;
use ProcessMaker\BusinessModel\ProcessSupervisor as BmProcessSupervisor;
use ProcessMaker\Model\DashletInstance;
use ProcessMaker\Model\GroupUser;
use ProcessMaker\Model\ObjectPermission;
use ProcessMaker\Model\Process as ModelProcess;
use ProcessMaker\Model\ProcessUser as ModelProcessUser;
use ProcessMaker\Model\RbacUsers as ModelRbacUsers;
use ProcessMaker\Model\TaskUser;
use ProcessMaker\Model\User as ModelUser;
use ProcessMaker\Plugins\PluginRegistry;
use ProcessMaker\Util\DateTime;
use ProcessMaker\Util\System;
@@ -45,6 +53,7 @@ use UsersRolesPeer;
class User
{
const DELETE_USER = 'unknown';
private $arrayFieldDefinition = array(
"USR_UID" => array(
"type" => "string",
@@ -1210,11 +1219,11 @@ class User
* @access public
*
* @param array $userData
* @param string $sRolCode
* @param string $rolCode
*
* @return void
*/
public function updateUser($userData = array(), $sRolCode = '')
public function updateUser($userData = [], $rolCode = '')
{
$this->userObj = new RbacUsers();
if (isset($userData['USR_STATUS'])) {
@@ -1223,9 +1232,9 @@ class User
}
}
$this->userObj->update($userData);
if ($sRolCode != '') {
if (!empty($rolCode)) {
$this->removeRolesFromUser($userData['USR_UID']);
$this->assignRoleToUser($userData['USR_UID'], $sRolCode);
$this->assignRoleToUser($userData['USR_UID'], $rolCode);
}
}
@@ -1285,7 +1294,7 @@ class User
public function delete($usrUid)
{
try {
//Verify data
// Verify data
$this->throwExceptionIfNotExistsUser($usrUid, $this->arrayFieldNameForException["usrUid"]);
// Check user admin
if (RBAC::isAdminUserUid($usrUid)) {
@@ -1340,6 +1349,76 @@ class User
}
}
/**
* Delete User
*
* @param string $usrUid Unique id of User
*
* @throws Exception
*/
public function deleteGdpr($usrUid)
{
try {
// Verify data
$this->throwExceptionIfNotExistsUser($usrUid, $this->arrayFieldNameForException["usrUid"]);
// Check user admin
if (RBAC::isAdminUserUid($usrUid)) {
throw new Exception(G::LoadTranslation("ID_MSG_CANNOT_DELETE_USER", [$usrUid]));
}
// Check user guest
if (RBAC::isGuestUserUid($usrUid)) {
throw new Exception(G::LoadTranslation("ID_MSG_CANNOT_DELETE_USER", [$usrUid]));
}
// Remove the user from groups
GroupUser::where('USR_UID', $usrUid)->delete();
// Remove the user from tasks assigment
TaskUser::where('USR_UID', $usrUid)->where('TU_RELATION', 1)->delete();
// Remove the user from process owner and assign to admin
ModelProcess::where('PRO_CREATE_USER', $usrUid)
->update(['PRO_CREATE_USER' => RBAC::ADMIN_USER_UID]);
// Remove the user from process permission
ObjectPermission::where('USR_UID', $usrUid)->where('OP_USER_RELATION', 1)->delete();
// Remove the user from process supervisor
ModelProcessUser::where('USR_UID', $usrUid)->where('PU_TYPE', 'SUPERVISOR')->delete();
// Mark the user with the deleted status
$fields = [
'USR_STATUS' => 'CLOSED',
'USR_USERNAME' => '',
'USR_FIRSTNAME' => self::DELETE_USER,
'USR_LASTNAME' => self::DELETE_USER,
'USR_EMAIL' => '',
'USR_DUE_DATE' => '0000-00-00',
'USR_CREATE_DATE' => '0000-00-00 00:00:00',
'USR_UPDATE_DATE' => '0000-00-00 00:00:00',
];
ModelRbacUsers::where('USR_UID', $usrUid)->update($fields);
$fields = array_merge(
$fields, [
'USR_STATUS_ID' => 0,
'USR_COUNTRY' => '',
'USR_CITY' => '',
'USR_LOCATION' => '',
'USR_ADDRESS' => '',
'USR_PHONE' => '',
'USR_FAX' => '',
'USR_CELLULAR' => '',
'USR_ZIP_CODE' => '',
'USR_BIRTHDAY' => '0000-00-00',
'USR_TIME_ZONE' => '',
'USR_EXTENDED_ATTRIBUTES_DATA' => '{}',
]
);
ModelUser::where('USR_UID', $usrUid)->update($fields);
// Delete Dashboard
DashletInstance::where('DAS_INS_OWNER_UID', $usrUid)->where('DAS_INS_OWNER_TYPE', 'USER')->delete();
// Destroy session after delete user
RBAC::destroySessionUser($usrUid);
(new OauthClients())->removeByUser($usrUid);
} catch (Exception $e) {
throw $e;
}
}
/**
* Get all Users
*

View File

@@ -0,0 +1,18 @@
<?php
namespace ProcessMaker\Model;
use App\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class DashletInstance extends Model
{
use HasFactory;
// Set our table name
protected $table = "DASHLET_INSTANCE";
// Set the PK
protected $primaryKey = 'DAS_INS_UID';
// No timestamps
public $timestamps = false;
}