Exemple #1
0
function BeforeProlog(){
	//include constanst
	include_once( getenv("DOCUMENT_ROOT").'/bitrix/templates/work_copy/consts/consts.php');
	
	// set user params for Authorized
	global $USER;
	if ( $USER->IsAuthorized() ) {
	
		$cache = new CPHPCache();
		$cache_time = 60*60*24;
		$cache_id = 'user_datas';
		$cache_path = '/myclasses/';
		$UID = $USER->GetID();
		
		$keyCODE = $UID;
		
		$arUserFields = array();
		if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path, $keyCODE )){
			 $res = $cache->GetVars();
		   if ( is_array ( $res["arUserFields"] ) && ( !empty( $res["arUserFields"] ) ) )
			  $arUserFields = $res["arUserFields"];
			  $arUSER_GROUPS = $res["arUSER_GROUPS"];
		}
		if (empty($result)){
			$dbUser = CUSER::GetList( 
									$by="ID",
									$sort="ASC",
									array("ID" => $UID),
									array( "SELECT" => array ("ID","UF_DEALER_ID") )
						);
			$arUserFields = $dbUser->Fetch();
			$arUSER_GROUPS = $USER->GetUserGroupArray();
		  //////////// end cache /////////
		   if ($cache_time > 0){
				 $cache->StartDataCache ( $cache_time, $cache_id, $cache_path );
				 $cache->EndDataCache   ( array( "arUserFields" => $arUserFields, "arUSER_GROUPS" => $arUSER_GROUPS ) );
		   }
		}
		
		$USER->SetParam( "UF_DEALER_ID", $arUserFields["UF_DEALER_ID"] );
		$USER->SetParam( "USER_GROUPS",  $arUSER_GROUPS);
	}
	
}
 public static function CanRead($Contract_ID)
 {
     global $USER;
     CModule::IncludeModule("iblock");
     $user_id = $USER->GetID();
     $dealer_id = $USER->GetParam("UF_DEALER_ID");
     $arUserGroup = CUSER::GetUserGroup($USER->GetID());
     $result = false;
     if (in_array(USER_DISTRIBUTOR_GROUP_ID, $arUserGroup) || in_array(USER_ADMIN_GROUP_ID, $arUserGroup)) {
         $result = true;
     } else {
         if (in_array(USER_DEALER_GROUP_ID, $arUserGroup)) {
             // Логика флиьтра:
             // получаю список договоров, где участвуют данные пользователя в договоре
             // поле Дилер, в договоре(свойство «cntrct_dealer»), должно совпадать с значением поля «UF_DEALER_ID» для дилера
             // поле «CREATED_BY» если договор создан этим пользователем.
             $arFilter = array("IBLOCK_ID" => IBLOCK_SK_CONTRACT_ID, array("LOGIC" => "OR", array("PROPERTY_cntrct_dealer" => $dealer_id), array("CREATED_BY" => $user_id)));
             $db = CIBlockElement::GetList(array(), $arFilter, false, false, array("IBLOCK_ID", "ID", "PROPERTY_cntrct_dealer", "CREATED_BY"));
             $arContractsID = array();
             while ($obContracts = $db->GetNextElement()) {
                 $tmp = array();
                 $tmp = $obContracts->GetFields();
                 $arContractsID[] = $tmp["ID"];
             }
             if (in_array($Contract_ID, $arContractsID)) {
                 $result = true;
             } else {
                 $result = false;
             }
         }
     }
     return $result;
 }