From 1536b824ac5ffe2bf2a9f7bdfc594e80f2d4d519 Mon Sep 17 00:00:00 2001 From: Uma <uma.s@vtiger.com> Date: Fri, 3 Jul 2020 15:10:31 +0530 Subject: [PATCH] Fixes Non-admin user privelege settings on non-accessible fields --- modules/Users/actions/SaveAjax.php | 54 +++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/modules/Users/actions/SaveAjax.php b/modules/Users/actions/SaveAjax.php index 61aaea632..a268431b0 100644 --- a/modules/Users/actions/SaveAjax.php +++ b/modules/Users/actions/SaveAjax.php @@ -88,9 +88,41 @@ class Users_SaveAjax_Action extends Vtiger_SaveAjax_Action { */ public function getRecordModelFromRequest(Vtiger_Request $request) { $recordModel = parent::getRecordModelFromRequest($request); - $fieldName = $request->get('field'); - $currentUserModel = Users_Record_Model::getCurrentUserModel(); + + $fieldModelList = $recordModel->getModule()->getFields(); + $validatedFielNames = array('is_admin', 'is_owner', 'roleid', 'signature'); + foreach ($fieldModelList as $fieldName => $fieldModel) { + if(in_array($fieldName, $validatedFielNames)){ + if ($request->has($fieldName)) { + $fieldValue = $request->get($fieldName, null); + } else { + $fieldValue = $fieldModel->getDefaultFieldValue(); + } + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } + if ($fieldName === 'is_admin' && (!$currentUserModel->isAdminUser() || !$fieldValue)) { + $fieldValue = 'off'; + } + //to not update is_owner from ui + if ($fieldName == 'is_owner' || $fieldName == 'roleid') { + $fieldValue = $this->getOwnerRoleValue($request, $fieldName); + } + if ($fieldName == 'signature' && $fieldValue !== null) { + $purifiedContent = vtlib_purify(decode_html($fieldValue)); + // Purify malicious html event attributes + $fieldValue = purifyHtmlEventAttributes(decode_html($purifiedContent), true); + } + if ($fieldValue !== null) { + if (!is_array($fieldValue)) { + $fieldValue = trim($fieldValue); + } + $recordModel->set($fieldName, $fieldValue); + } + } + } + $fieldName = $request->get('field'); if ($fieldName === 'is_admin' && (!$currentUserModel->isAdminUser() || !$request->get('value'))) { $recordModel->set($fieldName, 'off'); } else if($fieldName === 'is_admin' && $currentUserModel->isAdminUser()) { @@ -100,18 +132,22 @@ class Users_SaveAjax_Action extends Vtiger_SaveAjax_Action { } if($fieldName == "is_owner" || $fieldName == "roleid") { - $recordId = $request->get('record'); - $moduleName = $request->getModule(); - if(!empty($recordId)) { - $existingRecordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName); - $recordModel->set($fieldName,$existingRecordModel->get($fieldName)); - } + $fieldValue = $this->getOwnerRoleValue($request, $fieldName); + $recordModel->set($fieldName,$fieldValue); } return $recordModel; } - public function userExists(Vtiger_Request $request){ + public function getOwnerRoleValue(Vtiger_Request $request, $fieldName) { + $recordId = $request->get('record'); + $moduleName = $request->getModule(); + if(!empty($recordId)) { + $existingRecordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName); + return $existingRecordModel->get($fieldName); + } + } + public function userExists(Vtiger_Request $request){ $module = $request->getModule(); $userName = $request->get('user_name'); $status = Users_Record_Model::isUserExists($userName); -- GitLab