Поддержка серверов

CMain::SetFileAccessPermission: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=176540

<?php 
//    /bitrix/modules/main/classes/general/main.phpCMain::SetFileAccessPermission()
//    1532:

    
public function SetFileAccessPermission($path$arPermissions$bOverWrite=true)
    {
        global 
$CACHE_MANAGER;

        
CMain::InitPathVars($site$path);
        
$DOC_ROOT CSite::GetSiteDocRoot($site);

        
$path rtrim($path"/");
        if(
$path == '')
            
$path "/";

        if((
$p bxstrrpos($path"/")) !== false)
        {
            
$path_file substr($path$p+1);
            
$path_dir substr($path0$p);
        }
        else
            return 
false;

        if(
$path_file == "" && $path_dir == "")
            
$path_file "/";

        
$PERM = array();

        
$io CBXVirtualIo::GetInstance();
        if (
$io->FileExists($DOC_ROOT.$path_dir."/.access.php"))
        {
            
$fTmp $io->GetFile($DOC_ROOT.$path_dir."/.access.php");
            
//include replaced with eval in order to honor of ZendServer
            
eval("?>".$fTmp->GetContents());
        }

        
$FILE_PERM $PERM[$path_file];
        if(!
is_array($FILE_PERM))
            
$FILE_PERM = array();

        if(!
$bOverWrite && count($FILE_PERM)>0)
            return 
true;

        
$bDiff false;

        
$str="<?\n";
        foreach(
$arPermissions as $group=>$perm)
        {
            if(
strlen($perm) > 0)
                
$str .= "\$PERM[\"".EscapePHPString($path_file)."\"][\"".EscapePHPString($group)."\"]=\"".EscapePHPString($perm)."\";\n";

            if(!
$bDiff)
            {
                
//compatibility with group id
                
$curr_perm $FILE_PERM[$group];
                if(!isset(
$curr_perm) && preg_match('/^G[0-9]+$/'$group))
                    
$curr_perm $FILE_PERM[substr($group1)];

                if(
$curr_perm != $perm)
                    
$bDiff true;
            }
        }

        foreach(
$PERM as $file=>$arPerm)
        {
            if(
strval($file) !== $path_file)
                foreach(
$arPerm as $group=>$perm)
                    
$str .= "\$PERM[\"".EscapePHPString($file)."\"][\"".EscapePHPString($group)."\"]=\"".EscapePHPString($perm)."\";\n";
        }

        if(!
$bDiff)
        {
            foreach(
$FILE_PERM as $group=>$perm)
            {
                
//compatibility with group id
                
$new_perm $arPermissions[$group];
                if(!isset(
$new_perm) && preg_match('/^G[0-9]+$/'$group))
                    
$new_perm $arPermissions[substr($group1)];

                if(
$new_perm != $perm)
                {
                    
$bDiff true;
                    break;
                }
            }
        }

        
$str .= "?".">";

        
$this->SaveFileContent($DOC_ROOT.$path_dir."/.access.php"$str);
        
$CACHE_MANAGER->CleanDir("menu");
        
CBitrixComponent::clearComponentCache("bitrix:menu");
        unset(
$this->FILE_PERMISSION_CACHE[$site."|".$path_dir."/.access.php"]);

        if(
$bDiff)
        {
            foreach(
GetModuleEvents("main""OnChangePermissions"true) as $arEvent)
                
ExecuteModuleEventEx($arEvent, array(array($site$path), $arPermissions$FILE_PERM));

            if(
COption::GetOptionString("main""event_log_file_access""N") === "Y")
                
CEventLog::Log("SECURITY""FILE_PERMISSION_CHANGED""main""[".$site."] ".$pathprint_r($FILE_PERMtrue)." => ".print_r($arPermissionstrue));
        }
        return 
true;
    }

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение