From 2723cfdf6155960a9c0dea6881e01ab21fcbb177 Mon Sep 17 00:00:00 2001
From: Uma S <uma.s@vtiger.com>
Date: Tue, 13 Aug 2019 17:53:02 +0530
Subject: [PATCH] Check permission addresed on Vtiger core action files

---
 modules/Products/actions/Mass.php              |  6 ------
 modules/Vtiger/actions/DashBoardTab.php        | 12 ++++++++++++
 modules/Vtiger/actions/DownloadAttachment.php  | 11 +++++------
 modules/Vtiger/actions/ExportData.php          |  4 ----
 modules/Vtiger/actions/GetData.php             | 18 ++++++++++--------
 modules/Vtiger/actions/Mass.php                |  6 ++++++
 modules/Vtiger/actions/MentionedUsers.php      | 14 ++++++++------
 modules/Vtiger/actions/NoteBook.php            | 12 ++++++++++++
 modules/Vtiger/actions/ProcessDuplicates.php   | 10 ++++++++++
 .../actions/RecipientPreferencesSaveAjax.php   |  7 +++++++
 modules/Vtiger/actions/RemoveWidget.php        | 11 +++++++++++
 modules/Vtiger/actions/SaveWidgetPositions.php | 11 +++++++++++
 modules/Vtiger/actions/SaveWidgetSize.php      | 11 +++++++++++
 modules/Vtiger/views/AddNotePad.php            | 12 ++++++++++++
 modules/Vtiger/views/DashBoardTab.php          | 12 ++++++++++++
 15 files changed, 127 insertions(+), 30 deletions(-)

diff --git a/modules/Products/actions/Mass.php b/modules/Products/actions/Mass.php
index a719c0498..39e3286c9 100644
--- a/modules/Products/actions/Mass.php
+++ b/modules/Products/actions/Mass.php
@@ -15,12 +15,6 @@ class Products_Mass_Action extends Vtiger_Mass_Action {
 		$this->exposeMethod('isChildProduct');
 	}
 
-	public function requiresPermission(\Vtiger_Request $request) {
-		$permissions = parent::requiresPermission($request);
-		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
-		return $permissions;
-	}
-	
 	public function process(Vtiger_Request $request) {
 		$mode = $request->getMode();
 		if(!empty($mode)) {
diff --git a/modules/Vtiger/actions/DashBoardTab.php b/modules/Vtiger/actions/DashBoardTab.php
index 6582ce89d..a67ed527c 100644
--- a/modules/Vtiger/actions/DashBoardTab.php
+++ b/modules/Vtiger/actions/DashBoardTab.php
@@ -17,6 +17,18 @@ class Vtiger_DashBoardTab_Action extends Vtiger_Action_Controller {
 		$this->exposeMethod('updateTabSequence');
 	}
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$mode = $request->get('mode');
 		if ($mode) {
diff --git a/modules/Vtiger/actions/DownloadAttachment.php b/modules/Vtiger/actions/DownloadAttachment.php
index f06b6adaf..4ccf556b6 100644
--- a/modules/Vtiger/actions/DownloadAttachment.php
+++ b/modules/Vtiger/actions/DownloadAttachment.php
@@ -10,12 +10,11 @@
 
 class Vtiger_DownloadAttachment_Action extends Vtiger_Action_Controller {
 
-	public function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-
-		if (!Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $request->get('record'))) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName));
-		}
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		
+		return $permissions;
 	}
 
 	public function process(Vtiger_Request $request) {
diff --git a/modules/Vtiger/actions/ExportData.php b/modules/Vtiger/actions/ExportData.php
index 721ef835a..8bbea58fe 100644
--- a/modules/Vtiger/actions/ExportData.php
+++ b/modules/Vtiger/actions/ExportData.php
@@ -17,10 +17,6 @@ class Vtiger_ExportData_Action extends Vtiger_Mass_Action {
 		$permissions[] = array('module_parameter' => 'source_module', 'action' => 'Export');
 		return $permissions;
 	}
-	
-	function checkPermission(Vtiger_Request $request) {
-		parent::checkPermission($request);
-	}
 
 	/**
 	 * Function is called by the controller
diff --git a/modules/Vtiger/actions/GetData.php b/modules/Vtiger/actions/GetData.php
index 482f2c8e9..ed0274fd7 100644
--- a/modules/Vtiger/actions/GetData.php
+++ b/modules/Vtiger/actions/GetData.php
@@ -10,19 +10,21 @@
 
 class Vtiger_GetData_Action extends Vtiger_IndexAjax_View {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'source_module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$record = $request->get('record');
 		$sourceModule = $request->get('source_module');
 		$response = new Vtiger_Response();
 
-		$permitted = Users_Privileges_Model::isPermitted($sourceModule, 'DetailView', $record);
-		if($permitted) {
-			$recordModel = Vtiger_Record_Model::getInstanceById($record, $sourceModule);
-			$data = $recordModel->getData();
-			$response->setResult(array('success'=>true, 'data'=>array_map('decode_html',$data)));
-		} else {
-			$response->setResult(array('success'=>false, 'message'=>vtranslate('LBL_PERMISSION_DENIED')));
-		}
+		$recordModel = Vtiger_Record_Model::getInstanceById($record, $sourceModule);
+		$data = $recordModel->getData();
+		$response->setResult(array('success'=>true, 'data'=>array_map('decode_html',$data)));
+		
 		$response->emit();
 	}
 }
diff --git a/modules/Vtiger/actions/Mass.php b/modules/Vtiger/actions/Mass.php
index 83a2e79a8..f077bcb7b 100644
--- a/modules/Vtiger/actions/Mass.php
+++ b/modules/Vtiger/actions/Mass.php
@@ -10,6 +10,12 @@
 
 abstract class Vtiger_Mass_Action extends Vtiger_Action_Controller {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		return $permissions;
+	}
+	
 	protected function getRecordsListFromRequest(Vtiger_Request $request) {
 		$cvId = $request->get('viewname');
 		$module = $request->get('module');
diff --git a/modules/Vtiger/actions/MentionedUsers.php b/modules/Vtiger/actions/MentionedUsers.php
index 0b27e6286..ae906ccdc 100644
--- a/modules/Vtiger/actions/MentionedUsers.php
+++ b/modules/Vtiger/actions/MentionedUsers.php
@@ -10,14 +10,16 @@
 
 class Vtiger_MentionedUsers_Action extends Vtiger_Action_Controller {
 
-	function checkPermission(Vtiger_Request $request) {
-		return true;
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', 'ModComments');
+		
+		return $permissions;
 	}
-    
+	
     public function process(Vtiger_Request $request) {
-        $mentionRule = Settings_Notifications_Task_Model::getInstance('Mention');
-        $message = $request->get('message');
-        $mentionedUsers = $mentionRule->getMentionedNames($message);
         $commentId = $request->get('crmid');
         $commentRecord = Vtiger_Record_Model::getInstanceById($commentId, Vtiger_Module_Model::getInstance('ModComments'));
         $commentOwnerId = $commentRecord->get('creator');
diff --git a/modules/Vtiger/actions/NoteBook.php b/modules/Vtiger/actions/NoteBook.php
index 88e87b478..a553aee9b 100644
--- a/modules/Vtiger/actions/NoteBook.php
+++ b/modules/Vtiger/actions/NoteBook.php
@@ -14,6 +14,18 @@ class Vtiger_NoteBook_Action extends Vtiger_Action_Controller {
 		$this->exposeMethod('NoteBookCreate');
 	}
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	function process(Vtiger_Request $request) {
 		$mode = $request->getMode();
 
diff --git a/modules/Vtiger/actions/ProcessDuplicates.php b/modules/Vtiger/actions/ProcessDuplicates.php
index 74e98275d..95e613f25 100644
--- a/modules/Vtiger/actions/ProcessDuplicates.php
+++ b/modules/Vtiger/actions/ProcessDuplicates.php
@@ -10,7 +10,16 @@
 
 class Vtiger_ProcessDuplicates_Action extends Vtiger_Action_Controller {
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView');
+		
+		return $permissions;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
+		parent::checkPermission($request);
 		$module = $request->getModule();
 		$records = $request->get('records');
 		if($records) {
@@ -21,6 +30,7 @@ class Vtiger_ProcessDuplicates_Action extends Vtiger_Action_Controller {
 				}
 			}
 		}
+		return true;
 	}
 
 	function process (Vtiger_Request $request) {
diff --git a/modules/Vtiger/actions/RecipientPreferencesSaveAjax.php b/modules/Vtiger/actions/RecipientPreferencesSaveAjax.php
index 72b4f652a..74e4db4ee 100644
--- a/modules/Vtiger/actions/RecipientPreferencesSaveAjax.php
+++ b/modules/Vtiger/actions/RecipientPreferencesSaveAjax.php
@@ -10,6 +10,13 @@
 
 class Vtiger_RecipientPreferencesSaveAjax_Action extends Vtiger_SaveAjax_Action {
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$sourceModule = $request->get('source_module');
 		$selecltedFields = $request->get('selectedFields');
diff --git a/modules/Vtiger/actions/RemoveWidget.php b/modules/Vtiger/actions/RemoveWidget.php
index 3ace91794..bdaccd714 100644
--- a/modules/Vtiger/actions/RemoveWidget.php
+++ b/modules/Vtiger/actions/RemoveWidget.php
@@ -10,6 +10,17 @@
 
 class Vtiger_RemoveWidget_Action extends Vtiger_IndexAjax_View {
 
+	public function requiresPermission(Vtiger_Request $request){
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$currentUser = Users_Record_Model::getCurrentUserModel();
 		$linkId = $request->get('linkid');
diff --git a/modules/Vtiger/actions/SaveWidgetPositions.php b/modules/Vtiger/actions/SaveWidgetPositions.php
index e87302b64..742d68ea7 100644
--- a/modules/Vtiger/actions/SaveWidgetPositions.php
+++ b/modules/Vtiger/actions/SaveWidgetPositions.php
@@ -10,6 +10,17 @@
 
 class Vtiger_SaveWidgetPositions_Action extends Vtiger_IndexAjax_View {
 
+	public function requiresPermission(Vtiger_Request $request){
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$currentUser = Users_Record_Model::getCurrentUserModel();
 		
diff --git a/modules/Vtiger/actions/SaveWidgetSize.php b/modules/Vtiger/actions/SaveWidgetSize.php
index 9f6e82365..4920b0640 100644
--- a/modules/Vtiger/actions/SaveWidgetSize.php
+++ b/modules/Vtiger/actions/SaveWidgetSize.php
@@ -10,6 +10,17 @@
 
 class Vtiger_SaveWidgetSize_Action extends Vtiger_IndexAjax_View {
 
+	public function requiresPermission(Vtiger_Request $request){
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	public function process(Vtiger_Request $request) {
 		$currentUser = Users_Record_Model::getCurrentUserModel();
 
diff --git a/modules/Vtiger/views/AddNotePad.php b/modules/Vtiger/views/AddNotePad.php
index 182e40166..705c394bb 100644
--- a/modules/Vtiger/views/AddNotePad.php
+++ b/modules/Vtiger/views/AddNotePad.php
@@ -10,6 +10,18 @@
 
 class Vtiger_AddNotePad_View extends Vtiger_Index_View {
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
 	function process (Vtiger_Request $request) {
 		$currentUser = Users_Record_Model::getCurrentUserModel();
 		$viewer = $this->getViewer($request);
diff --git a/modules/Vtiger/views/DashBoardTab.php b/modules/Vtiger/views/DashBoardTab.php
index b737557e1..8ab58f8cd 100644
--- a/modules/Vtiger/views/DashBoardTab.php
+++ b/modules/Vtiger/views/DashBoardTab.php
@@ -17,6 +17,18 @@ class Vtiger_DashboardTab_View extends Vtiger_Index_View {
         $this->exposeMethod('showDashBoardTabList');
 	}
     
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		if($request->get('module') != 'Dashboard'){
+			$request->set('custom_module', 'Dashboard');
+			$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		}else{
+			$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		}
+		
+		return $permissions;
+	}
+	
     function process(Vtiger_Request $request) {
 		$mode = $request->getMode();
 		if(!empty($mode)) {
-- 
GitLab