Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
CRAP | |
0.00% |
0 / 176 |
UserRoleService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
1722.00 | |
0.00% |
0 / 176 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
assignUserRole | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
deleteAssignedUserRole | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
|||
checkUserHasRoles | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 24 |
|||
assignRolesToUser | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 31 |
|||
assignRoleToMultipleUsers | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 22 |
|||
removeRolesFromMultipleUsers | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 19 |
|||
removeRolesFromUser | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 26 |
|||
deleteUserRolesByRoleId | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
<?php | |
namespace com\linways\core\ams\professional\service; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\request\AddUserToRoleRequest; | |
use com\linways\core\ams\professional\request\AssignRolesToUserRequest; | |
use com\linways\core\ams\professional\request\AssignRoleToMultipleUsersRequest; | |
use com\linways\core\ams\professional\request\DeleteAssignedUserRoleRequest; | |
use com\linways\core\ams\professional\request\DeleteUserRolesByRoleRequest; | |
use com\linways\core\ams\professional\request\RemoveRolesFromMultipleUsersRequest; | |
use com\linways\core\ams\professional\request\RemoveRolesFromUserRequest; | |
use com\linways\core\ams\professional\logging\AMSLogger; | |
use com\linways\core\ams\professional\logging\Events; | |
use com\linways\core\ams\professional\constant\StatusConstants; | |
/** | |
* | |
* @Date 30/07/20 | |
* @author JithinVijayan <jithin@linways.com> | |
*/ | |
class UserRoleService extends BaseService | |
{ | |
/** | |
* @var null | |
*/ | |
private static $_instance = null; | |
private $logger = null; | |
/** | |
* UserRoleService constructor. | |
*/ | |
private function __construct() | |
{ | |
$this->logger = AMSLogger::getLogger(); | |
} | |
/** | |
* prevent cloning | |
*/ | |
private function __clone() | |
{ | |
} | |
/** | |
* @return UserRoleService|null | |
*/ | |
public static function getInstance() | |
{ | |
if (!is_object(self::$_instance)) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
/** | |
* @param AddUserToRoleRequest $request | |
* @return Object|integer | |
* @throws ProfessionalException | |
*/ | |
public function assignUserRole(AddUserToRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->roleId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid role details given"); | |
} | |
if (empty($request->userId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_ID, "Invalid user details given"); | |
} | |
if (empty($request->userType)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_TYPE, "Invalid user type given"); | |
} | |
$sql = "INSERT INTO user_account_roles (user_id, user_type, role_id, created_by, created_date, updated_by, updated_date) | |
VALUES ($request->userId,'$request->userType',$request->roleId,$request->createdBy,UTC_TIMESTAMP(), | |
$request->updatedBy,UTC_TIMESTAMP())"; | |
try { | |
return $this->executeQueryForObject($sql, true); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param DeleteAssignedUserRoleRequest $request | |
* @throws ProfessionalException | |
*/ | |
public function deleteAssignedUserRole(DeleteAssignedUserRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->userRoleId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_ROLE_ID, "Invalid user role details given"); | |
} | |
//TODO: Validate user roles already using somewhere in the database | |
$sql = "DELETE FROM user_account_roles WHERE id = $request->userRoleId"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param $userId | |
* @param $userType | |
* @return Object|array | |
* @throws ProfessionalException | |
*/ | |
public function checkUserHasRoles($userId, $userType, $roleList=[]) | |
{ | |
$userId = (int)$this->realEscapeString($userId); | |
$userType = $this->realEscapeString($userType); | |
$roleList = $this->realEscapeArray($roleList); | |
$cond = ""; | |
// For centalized login. role taken from the token. | |
if(count($roleList) >0 ){ | |
$cond .= " AND r.code IN ('". implode("','", $roleList) . "')"; | |
} | |
if (empty($userId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_ID, "Invalid user details given"); | |
} | |
if (empty($userType)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_TYPE, "Invalid user details given"); | |
} | |
$sql = "SELECT DISTINCT r.code as roleCode | |
FROM user_account_roles | |
INNER JOIN roles r on user_account_roles.role_id = r.id | |
WHERE user_id = $userId AND user_type = '$userType' $cond ORDER BY r.code"; | |
try { | |
return $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Assigning roles to user | |
* | |
* @throws ProfessionalException | |
*/ | |
public function assignRolesToUser(AssignRolesToUserRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->userId) || empty($request->userType)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
} | |
try { | |
$sql = "INSERT IGNORE INTO user_account_roles (user_id, user_type, role_id, created_by, created_date, | |
updated_by, updated_date) VALUES "; | |
foreach ($request->roleIds as $roleId) { | |
$sql .= "($request->userId,'$request->userType',$roleId,$request->createdBy,UTC_TIMESTAMP(), | |
$request->updatedBy,UTC_TIMESTAMP()),"; | |
} | |
$sql = rtrim($sql, ","); | |
$sql .= ";"; | |
AMSLogger::log_info($this->logger, Events::ASSIGN_ROLES_USER, [ | |
"CreatedStaff" => $GLOBALS['userId'], | |
"AffectedStaff" => $request->userId, | |
"roles" => $request->roleIds, | |
"status" => StatusConstants::SUCCESS | |
]); | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
AMSLogger::log_error($this->logger, Events::ASSIGN_ROLES_USER, [ | |
"CreatedStaff" => $GLOBALS['userId'], | |
"AffectedStaff" => $request->userId, | |
"roles" => $request->roleIds, | |
"status" => StatusConstants::FAILURE | |
]); | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Assigning roles to multiple users | |
* | |
* @throws ProfessionalException | |
*/ | |
public function assignRoleToMultipleUsers(AssignRoleToMultipleUsersRequest $request) { | |
$request = $this->realEscapeObject($request); | |
if (empty($request->userIds) || empty($request->roleIds)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
} | |
if (empty($request->userType)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS, "Invalid user type"); | |
} | |
try { | |
$sql = "INSERT IGNORE INTO user_account_roles (user_id, user_type, role_id, created_by, created_date, | |
updated_by, updated_date) VALUES "; | |
foreach ($request->userIds as $userId) { | |
foreach ($request->roleIds as $roleId) { | |
$sql .= "('$userId','$request->userType','$roleId','$request->createdBy',UTC_TIMESTAMP(), '$request->updatedBy', UTC_TIMESTAMP()),"; | |
} | |
} | |
$sql = rtrim($sql, ","); | |
$sql .= ";"; | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Assigning roles to multiple users | |
* | |
* @throws ProfessionalException | |
*/ | |
public function removeRolesFromMultipleUsers(RemoveRolesFromMultipleUsersRequest $request) { | |
$request = $this->realEscapeObject($request); | |
if (empty($request->userIds) || empty($request->roleIds)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
} | |
if (empty($request->userType)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS, "Invalid user type"); | |
} | |
try { | |
$sql = "DELETE | |
FROM | |
user_account_roles | |
WHERE | |
user_id IN ('" . implode("','", $request->userIds) . "') | |
AND role_id IN ('" . implode("','", $request->roleIds) . "');"; | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* TODO: Invalid refresh and access token when roles deleting | |
* removing roles from a user | |
* | |
* @param RemoveRolesFromUserRequest $request | |
* @throws ProfessionalException | |
*/ | |
public function removeRolesFromUser(RemoveRolesFromUserRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->userId) || empty($request->userType)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
} | |
try { | |
$sql = "DELETE FROM user_account_roles | |
WHERE user_id = $request->userId | |
AND user_type='$request->userType' AND role_id IN (" . implode(",", $request->roleIds) . ")"; | |
AMSLogger::log_info($this->logger, Events::REMOVE_ASSIGN_ROLES_USER, [ | |
"CreatedStaff" => $GLOBALS['userId'], | |
"AffectedStaff" => $request->userId, | |
"roles" => $request->roleIds, | |
"status" => StatusConstants::SUCCESS | |
]); | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
AMSLogger::log_error($this->logger, Events::REMOVE_ASSIGN_ROLES_USER, [ | |
"CreatedStaff" => $GLOBALS['userId'], | |
"AffectedStaff" => $request->userId, | |
"roles" => $request->roleIds, | |
"status" => StatusConstants::FAILURE | |
]); | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* deleting user roles by role id | |
* | |
* @param $roleId | |
* @throws ProfessionalException | |
*/ | |
public function deleteUserRolesByRoleId(DeleteUserRolesByRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->roleId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid role details given"); | |
} | |
$sql = "DELETE FROM user_account_roles WHERE role_id = '$request->roleId'"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} |