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

CUser::GetGroupPolicy: метод Битрикс

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

//    CUser::GetGroupPolicy()
//    /bitrix/modules/main/classes/general/user.php:3119

    public static function GetGroupPolicy($iUserId)
    {
        global $DB;
        static $arPOLICY_CACHE;
        if(!is_array($arPOLICY_CACHE))
            $arPOLICY_CACHE = array();
        $CACHE_ID = md5(serialize($iUserId));
        if(array_key_exists($CACHE_ID, $arPOLICY_CACHE))
            return $arPOLICY_CACHE[$CACHE_ID];

        global $BX_GROUP_POLICY;
        $arPolicy = $BX_GROUP_POLICY;
        if($arPolicy["SESSION_TIMEOUT"]<=0)
            $arPolicy["SESSION_TIMEOUT"] = ini_get("session.gc_maxlifetime")/60;

        $arSql = array();
        $arSql[] =
            "SELECT G.SECURITY_POLICY ".
            "FROM b_group G ".
            "WHERE G.ID=2";

        if(is_array($iUserId))
        {
            $arGroups = array();
            foreach($iUserId as $value)
            {
                $value = intval($value);
                if($value > 0 && $value != 2)
                    $arGroups[$value] = $value;
            }
            if(count($arGroups) > 0)
            {
                $arSql[] =
                    "SELECT G.ID GROUP_ID, G.SECURITY_POLICY ".
                    "FROM b_group G ".
                    "WHERE G.ID in (".implode(", ", $arGroups).")";
            }
        }
        elseif(intval($iUserId) > 0)
        {
            $arSql[] =
                "SELECT UG.GROUP_ID, G.SECURITY_POLICY ".
                "FROM b_user_group UG, b_group G ".
                "WHERE UG.USER_ID = ".intval($iUserId)." ".
                "    AND UG.GROUP_ID = G.ID ".
                "    AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= ".$DB->CurrentTimeFunction().")) ".
                "    AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= ".$DB->CurrentTimeFunction().")) ";
        }

        foreach($arSql as $strSql)
        {
            $res = $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
            while($ar = $res->Fetch())
            {
                if($ar["SECURITY_POLICY"])
                    $arGroupPolicy = unserialize($ar["SECURITY_POLICY"]);
                else
                    continue;

                if(!is_array($arGroupPolicy))
                    continue;

                foreach($arGroupPolicy as $key=>$val)
                {
                    switch($key)
                    {
                    case "STORE_IP_MASK":
                    case "SESSION_IP_MASK":
                    case "BLOCK_TIME":
                        if($arPolicy[$key]<$val)
                            $arPolicy[$key] = $val;
                        break;
                    case "SESSION_TIMEOUT":
                        if($arPolicy[$key]<=0 || $arPolicy[$key]>$val)
                            $arPolicy[$key] = $val;
                        break;
                    case "PASSWORD_LENGTH":
                        if($arPolicy[$key]<=0 || $arPolicy[$key] < $val)
                            $arPolicy[$key] = $val;
                        break;
                    case "PASSWORD_UPPERCASE":
                    case "PASSWORD_LOWERCASE":
                    case "PASSWORD_DIGITS":
                    case "PASSWORD_PUNCTUATION":
                        if($val === "Y")
                            $arPolicy[$key] = "Y";
                        break;
                    case "LOGIN_ATTEMPTS":
                    case "BLOCK_LOGIN_ATTEMPTS":
                        if($val > 0 && ($arPolicy[$key] <= 0 || $arPolicy[$key] > $val))
                            $arPolicy[$key] = $val;
                        break;
                    default:
                        if($arPolicy[$key]>$val)
                            $arPolicy[$key] = $val;
                    }
                }
            }
            if($arPolicy["PASSWORD_LENGTH"] === false)
                $arPolicy["PASSWORD_LENGTH"] = 6;
        }
        $ar = array(
            GetMessage("MAIN_GP_PASSWORD_LENGTH", array("#LENGTH#" => intval($arPolicy["PASSWORD_LENGTH"])))
        );
        if($arPolicy["PASSWORD_UPPERCASE"] === "Y")
            $ar[] = GetMessage("MAIN_GP_PASSWORD_UPPERCASE");
        if($arPolicy["PASSWORD_LOWERCASE"] === "Y")
            $ar[] = GetMessage("MAIN_GP_PASSWORD_LOWERCASE");
        if($arPolicy["PASSWORD_DIGITS"] === "Y")
            $ar[] = GetMessage("MAIN_GP_PASSWORD_DIGITS");
        if($arPolicy["PASSWORD_PUNCTUATION"] === "Y")
            $ar[] = GetMessage("MAIN_GP_PASSWORD_PUNCTUATION");
        $arPolicy["PASSWORD_REQUIREMENTS"] = implode(", ", $ar).".";

        if(count($arPOLICY_CACHE)<=10)
            $arPOLICY_CACHE[$CACHE_ID] = $arPolicy;

        return $arPolicy;
    }

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

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

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

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

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

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

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

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