Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как запретить изменять пароль

00 голосов
3
Есть задача: запретить определенной группе пользователей запретить изменять самим пароль.
Как это можно реализовать, кроме как правки главного модуля??

Заранее благодарен.
спросил 24 Март, 14 от Flamingo (100 баллов)

3 Ответы

00 голосов
Цитата
sssrg пишет:
Как это можно реализовать, кроме как правки главного модуля??

Зачем модуль то править?
Используйте событие OnBeforeUserUpdate
Цитата
Событие вызывается в методе CUser::Update до изменения параметров пользователя, и может быть использовано для отмены изменения или переопределения некоторых полей.

Проверяйте, если пользователь с нужной группы, запрещайте ему менять данные.
ответил 22 Сен, 14 от Almarea (3,760 баллов)
00 голосов
Если более подробно, то можно добавить что-то вроде этого в файл bitrix/php_interface/init.php (если файла нет, необходимо его создать):

Код
class CMyEventHandlers {
    function OnBeforeUserUpdateHandler(&$arFields) {
        if (array_key_exists("PASSWORD", $arFields)) {
            $iUserID = 0;

            if (array_key_exists("ID", $arFields)) {
                // OnBeforeUserUpdate event
                $iUserID = $arFields['ID'];
            } else if (array_key_exists("LOGIN", $arFields)) {
                // OnBeforeUserChangePassword event (user descriptor isn't passed)
                $objUser = CUser::GetByLogin($arFields);
                if (is_object($objUser) && $arUser = $objUser->Fetch()) {
                    $iUserID = $arUser['ID'];
                }
            }

            // List of "restricted" groups descriptors
            $arIntersect = array(2, 3, 4);

            // If the user belongs to at least one of the "restricted" groups
            if ($iUserID > 0 && count(array_intersect(CUser::GetUserGroup($iUserID), $arIntersect)) > 0) {
                global $APPLICATION;
                if (is_object($APPLICATION)) {
                    $APPLICATION->ThrowException("Can't change the password.");
                }

                return false;
            }
        }
    }
}

AddEventHandler("main", "OnBeforeUserUpdate", 
                        array("CMyEventHandlers", "OnBeforeUserUpdateHandler"));
AddEventHandler("main", "OnBeforeUserChangePassword", 
                        array("CMyEventHandlers", "OnBeforeUserUpdateHandler"));

По хорошему, идентификаторы интересующих групп неплохо бы брать из опций, или откуда-нибудь. То есть не прописывать их жестко как в примере.
ответил 26 Янв, 15 от SuPeRSID (180 баллов)
00 голосов
Спасибо за ответы, но я думал, что может быть можно какими-то средствами в настройках прав сделать.
Запрограммировать-то можно что угодно...
ответил 10 Май, 15 от Flamingo (100 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 09 Апр, 14 от Dexteres (100 баллов)
0 голосов
1 ответ
0 голосов
1 ответ
спросил 16 Янв, 14 от BAGIRA (560 баллов)
0 голосов
5 ответов
спросил 02 Июнь, 13 от Aketi (160 баллов)
0 голосов
3 ответов
спросил 03 Апр, 13 от Daeno (520 баллов)