Просмотр исходного кода

#3290 Analytics: make access to analytics page by membership action

RomanL 5 лет назад
Родитель
Сommit
a6912190e1

+ 39 - 2
modules/boonex/analytics/classes/BxAnalyticsModule.php

@@ -51,8 +51,37 @@ class BxAnalyticsModule extends BxDolModule
     */
     public function serviceGetCanvas()
     {
+		$sMsg = $this->checkAllowed();
+		if($sMsg !== CHECK_ACTION_RESULT_ALLOWED){
+			$this->_oTemplate->displayAccessDenied($sMsg, BX_PAGE_EMBED);
+			exit;
+		}
+		
         return $this->_oTemplate->getCanvas();
     }
+	
+	/**
+    * @page service Service Calls
+    * @section bx_analytics Analytics
+    * @subsection bx_analytics-other Other
+    * @subsubsection bx_analytics is_avaliable
+    * 
+    * @code bx_srv('bx_analytics', 'is_avaliable', [...]); @endcode
+    * 
+    * Check avalability for current profile  
+    * 
+    * @return boolean. 
+    * 
+    * @see BxAnalyticsModule::serviceIsAvaliable
+    */
+    /** 
+    * @ref bx_analytics-is_avaliable "is_avaliable"
+    */
+	public function serviceIsAvaliable()
+    {
+		return $this->checkAllowed() === CHECK_ACTION_RESULT_ALLOWED ? true : false;
+    }
+	
           
     /**
     * @page service Service Calls
@@ -97,7 +126,7 @@ class BxAnalyticsModule extends BxDolModule
           
     public function actionGetReports($sModuleName)
     {
-        if(!BxDolAcl::getInstance()->isMemberLevelInSet(192))
+		if(!$this->serviceIsAvaliable())
             return '';
             
         header('Content-Type: application/json');
@@ -140,7 +169,7 @@ class BxAnalyticsModule extends BxDolModule
           
     public function actionGetReportsData($sModuleName, $sReportName, $sDateFrom, $sDateTo, $sType = '')
     {
-        if(!BxDolAcl::getInstance()->isMemberLevelInSet(192))
+        if(!$this->serviceIsAvaliable())
             return '';
         
         if ($sType == 'csv'){
@@ -424,6 +453,14 @@ class BxAnalyticsModule extends BxDolModule
         
         return json_encode($aDataForChart);
     }
+	
+	public function checkAllowed($isPerformAction = false)
+    {
+        $aCheck = checkActionModule(bx_get_logged_profile_id(), 'use analytics', $this->getName(), $isPerformAction);
+        if ($aCheck[CHECK_ACTION_RESULT] !== CHECK_ACTION_RESULT_ALLOWED)
+             return _t('_sys_txt_access_denied');
+        return CHECK_ACTION_RESULT_ALLOWED;
+    }
           
     public function getSelectedModules()
     {

+ 37 - 36
modules/boonex/analytics/install/langs/en.xml

@@ -1,39 +1,40 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources name="en" flag="gb" title="English">
-  <string name="_bx_analytics"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_adm_stg_cpt_type"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_adm_stg_cpt_category_general"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_page_block_title_canvas"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_page_block_title_system_canvas"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_adm_stg_cpt_modules_enabled"><![CDATA[Enabled for modules]]></string>
-  <string name="_bx_analytics_adm_stg_cpt_items_count"><![CDATA[Max number of items]]></string>
-  <string name="_bx_analytics_adm_stg_cpt_default_interval_day"><![CDATA[Default interval in days]]></string>
-  <string name="_bx_analytics_page_title_sys_page"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_page_title_page"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_page_block_title_system_canvas"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_page_block_title_canvas"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_item_title_system_analytics"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_item_title_analytics"><![CDATA[Analytics]]></string>
-  <string name="_bx_analytics_type_top_contents_by_likes"><![CDATA[Top contents by likes]]></string>
-  <string name="_bx_analytics_type_content_growth"><![CDATA[Total numbers]]></string>
-  <string name="_bx_analytics_type_content_speed"><![CDATA[Growth speed]]></string>
-  <string name="_bx_analytics_type_accounts_growth"><![CDATA[Accounts - Total numbers]]></string>
-  <string name="_bx_analytics_type_accounts_speed"><![CDATA[Accounts - Growth speed]]></string>
-  <string name="_bx_analytics_type_top_by_views"><![CDATA[Top by views]]></string>
-  <string name="_bx_analytics_type_most_followed_profiles"><![CDATA[Most followed profiles]]></string>
-  <string name="_bx_analytics_type_most_active_profiles"><![CDATA[Most active profiles]]></string>
-  <string name="_bx_analytics_system_text"><![CDATA[System]]></string>
-  <string name="_bx_analytics_txt_empty_title_item"><![CDATA[Empty title]]></string>
-  <string name="_bx_analytics_txt_item"><![CDATA[Item]]></string>
-  <string name="_bx_analytics_txt_date"><![CDATA[Date]]></string>
-  <string name="_bx_analytics_txt_value"><![CDATA[Value]]></string>
-  <string name="_bx_analytics_txt_total_count"><![CDATA[Total]]></string>
-  <string name="_bx_analytics_txt_count"><![CDATA[{0}]]></string>
-  <string name="_bx_analytics_txt_accounts"><![CDATA[Accounts]]></string>
-  <string name="_bx_analytics_txt_export_to_csv_title"><![CDATA[Export to CSV file]]></string>
-  <string name="_bx_analytics_txt_total_content"><![CDATA[All content]]></string>
-  <string name="_bx_analytics_type_top_by_views_label"><![CDATA[Views]]></string>
-  <string name="_bx_analytics_type_top_by_likes_label"><![CDATA[Likes]]></string>
-  <string name="_bx_analytics_type_top_by_followers_label"><![CDATA[Followed]]></string>
-  <string name="_bx_analytics_type_top_by_activity_label"><![CDATA[Content]]></string>
+	<string name="_bx_analytics"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_adm_stg_cpt_type"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_adm_stg_cpt_category_general"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_page_block_title_canvas"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_page_block_title_system_canvas"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_adm_stg_cpt_modules_enabled"><![CDATA[Enabled for modules]]></string>
+	<string name="_bx_analytics_adm_stg_cpt_items_count"><![CDATA[Max number of items]]></string>
+	<string name="_bx_analytics_adm_stg_cpt_default_interval_day"><![CDATA[Default interval in days]]></string>
+	<string name="_bx_analytics_page_title_sys_page"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_page_title_page"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_page_block_title_system_canvas"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_page_block_title_canvas"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_item_title_system_analytics"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_item_title_analytics"><![CDATA[Analytics]]></string>
+	<string name="_bx_analytics_type_top_contents_by_likes"><![CDATA[Top contents by likes]]></string>
+	<string name="_bx_analytics_type_content_growth"><![CDATA[Total numbers]]></string>
+	<string name="_bx_analytics_type_content_speed"><![CDATA[Growth speed]]></string>
+	<string name="_bx_analytics_type_accounts_growth"><![CDATA[Accounts - Total numbers]]></string>
+	<string name="_bx_analytics_type_accounts_speed"><![CDATA[Accounts - Growth speed]]></string>
+	<string name="_bx_analytics_type_top_by_views"><![CDATA[Top by views]]></string>
+	<string name="_bx_analytics_type_most_followed_profiles"><![CDATA[Most followed profiles]]></string>
+	<string name="_bx_analytics_type_most_active_profiles"><![CDATA[Most active profiles]]></string>
+	<string name="_bx_analytics_system_text"><![CDATA[System]]></string>
+	<string name="_bx_analytics_txt_empty_title_item"><![CDATA[Empty title]]></string>
+	<string name="_bx_analytics_txt_item"><![CDATA[Item]]></string>
+	<string name="_bx_analytics_txt_date"><![CDATA[Date]]></string>
+	<string name="_bx_analytics_txt_value"><![CDATA[Value]]></string>
+	<string name="_bx_analytics_txt_total_count"><![CDATA[Total]]></string>
+	<string name="_bx_analytics_txt_count"><![CDATA[{0}]]></string>
+	<string name="_bx_analytics_txt_accounts"><![CDATA[Accounts]]></string>
+	<string name="_bx_analytics_txt_export_to_csv_title"><![CDATA[Export to CSV file]]></string>
+	<string name="_bx_analytics_txt_total_content"><![CDATA[All content]]></string>
+	<string name="_bx_analytics_type_top_by_views_label"><![CDATA[Views]]></string>
+	<string name="_bx_analytics_type_top_by_likes_label"><![CDATA[Likes]]></string>
+	<string name="_bx_analytics_type_top_by_followers_label"><![CDATA[Followed]]></string>
+	<string name="_bx_analytics_type_top_by_activity_label"><![CDATA[Content]]></string>
+	<string name="_bx_analytics_acl_action_use_analytics"><![CDATA[Use Analytics]]></string>	
 </resources>

+ 4 - 0
modules/boonex/analytics/install/sql/disable.sql

@@ -12,3 +12,7 @@ DELETE FROM `sys_pages_blocks` WHERE `module` = @sName;
 
 -- MENU
 DELETE FROM `sys_menu_items` WHERE `module` = @sName ;
+
+-- ACL
+DELETE `sys_acl_actions`, `sys_acl_matrix` FROM `sys_acl_actions`, `sys_acl_matrix` WHERE `sys_acl_matrix`.`IDAction` = `sys_acl_actions`.`ID` AND `sys_acl_actions`.`Module` = @sName;
+DELETE FROM `sys_acl_actions` WHERE `Module` = @sName;

+ 14 - 3
modules/boonex/analytics/install/sql/enable.sql

@@ -21,9 +21,20 @@ INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `lay
 ('bx_analytics_page', '_bx_analytics_page_title_sys_page', '_bx_analytics_page_title_page', @sName, 5, 2147483647, 1, 'analytics', '', '', '', '', 0, 1, 0, 'BxAnalyticsPage', 'modules/boonex/analytics/classes/BxAnalyticsPage.php');
 
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
-('bx_analytics_page', 1,  @sName, '_bx_analytics_page_block_title_system_canvas', '_bx_analytics_page_block_title_canvas', 11, 192, 'service', 'a:2:{s:6:"module";s:12:"bx_analytics";s:6:"method";s:10:"get_canvas";}', 0, 1, 1, 0);
+('bx_analytics_page', 1,  @sName, '_bx_analytics_page_block_title_system_canvas', '_bx_analytics_page_block_title_canvas', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:12:"bx_analytics";s:6:"method";s:10:"get_canvas";}', 0, 1, 1, 0);
 
 -- MENU: account dashboard
 SET @iMoAccountDashboard = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_account_dashboard' LIMIT 1);
-INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES
-('sys_account_dashboard', @sName, 'dashboard-analytics', '_bx_analytics_item_title_system_analytics', '_bx_analytics_item_title_analytics', 'page.php?i=analytics', '', '', 'certificate col-red', '', '', 192, 1, 0, 1, @iMoAccountDashboard + 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES
+('sys_account_dashboard', @sName, 'dashboard-analytics', '_bx_analytics_item_title_system_analytics', '_bx_analytics_item_title_analytics', 'page.php?i=analytics', '', '', 'certificate col-red', '', '', 2147483647, 'a:2:{s:6:"module";s:12:"bx_analytics";s:6:"method";s:12:"is_avaliable";}', 1, 0, 1, @iMoAccountDashboard + 1);
+
+-- ACL
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'use analytics', NULL, '_bx_analytics_acl_action_use_analytics', '', 1, 3);
+SET @iIdActionUseAnalytics = LAST_INSERT_ID();
+
+SET @iModerator = 7;
+SET @iAdministrator = 8;
+INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
+(@iModerator, @iIdActionUseAnalytics),
+(@iAdministrator, @iIdActionUseAnalytics);