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

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

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

//    CMain::SetFileAccessPermission()
//    /bitrix/modules/main/classes/general/main.php:1533

    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($path, 0, $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($group, 1)];

                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($group, 1)];

                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."] ".$path, print_r($FILE_PERM, true)." => ".print_r($arPermissions, true));
        }
        return true;
    }
';

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

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

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

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

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

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

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

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