ImageToElement управление правами доступа
Запись от 24.10.2016
Есть такой хороший модуль ImageToElement, который превращает набор картинок в набор элементов инфоблока с детальной картинкой.
Однако, оказалось, что модуль не поддерживает настройку прав доступа, а она как раз очень понадобилась. Исправляем! (актуально для 0.0.3, может позже разработчик добавит такую возможность)
Первым делом добавляем страницу с опциями, что бы в спике модулей у нас появилсь страница для настроек.
Добавляем страницу с настройками прав доступа:
/bitrix/modules/igima.imagetoelement/options.php
/bitrix/modules/igima.imagetoelement/lang/ru/options.php
Здесь проверяем, есть ли у пользователя права доступа к модулю и затем, есть ли права на запись в открытый раздел инфоблока:
/bitrix/modules/igima.imagetoelement/interface/get_menu.php
Однако, оказалось, что модуль не поддерживает настройку прав доступа, а она как раз очень понадобилась. Исправляем! (актуально для 0.0.3, может позже разработчик добавит такую возможность)
Первым делом добавляем страницу с опциями, что бы в спике модулей у нас появилсь страница для настроек.
Добавляем страницу с настройками прав доступа:
/bitrix/modules/igima.imagetoelement/options.php
<?
IncludeModuleLangFile(__FILE__);
$module_id = 'igima.imagetoelement';
if($sModuleRight>='R'):?>
<?
$aTabs = Array(
Array(
'DIV' => 'edit1',
'TAB' => GetMessage('MAIN_TAB_RIGHTS'),
'TITLE' => GetMessage('MAIN_TAB_TITLE_RIGHTS')
),
);
$tabControl = new CAdminTabControl('tabControl', $aTabs);
?>
<?$tabControl->Begin();?>
<form method="post"
action="<?=$APPLICATION->GetCurPage()?>?mid=<?=htmlspecialcharsbx($mid)?>&lang=<?=LANGUAGE_ID?>">
<?=bitrix_sessid_post()?>
<?$tabControl->BeginNextTab();?>
<?require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/admin/group_rights.php');?>
<?$tabControl->Buttons();?>
<script language="JavaScript">
function RestoreDefaults() {
if(confirm('<?=AddSlashes(GetMessage('MAIN_HINT_RESTORE_DEFAULTS_WARNING'))?>')) {
window.location = "<?=$APPLICATION->GetCurPage()?>?RestoreDefaults=Y&lang=<?=LANGUAGE_ID?>&mid=<?=urlencode($mid)?>";
}
}
</script>
<input type="submit"
<?=($sModuleRight < 'W') ? 'disabled' : '';?>
name="Update"
value="<?=GetMessage('IGIMAIMAGETOELEMENT__OPT_SAVE')?>">
<input type="hidden"
name="Update"
value="Y">
<input type="reset"
name="reset"
value="<?=GetMessage('IGIMAIMAGETOELEMENT__OPT_RESET')?>">
<input type="button"
<?=($sModuleRight < 'W') ? 'disabled' : '';?>
title="<?=GetMessage('MAIN_HINT_RESTORE_DEFAULTS')?>"
OnClick="RestoreDefaults();"
value="<?=GetMessage('IGIMAIMAGETOELEMENT__OPT_DEFAULTS')?>">
<?$tabControl->End();?>
</form>
<?endif; ?>
Этой странице нужен файл языковой версии:/bitrix/modules/igima.imagetoelement/lang/ru/options.php
<?
$MESS['IGIMAIMAGETOELEMENT__OPT_SAVE'] = 'Сохранить';
$MESS['IGIMAIMAGETOELEMENT__OPT_RESET'] = 'Сбросить';
$MESS['IGIMAIMAGETOELEMENT__OPT_DEFAULTS'] = 'По умолчанию';
И остается поправить правила подключения кнопки в админке.Здесь проверяем, есть ли у пользователя права доступа к модулю и затем, есть ли права на запись в открытый раздел инфоблока:
/bitrix/modules/igima.imagetoelement/interface/get_menu.php
...
$module_id = 'igima.imagetoelement';
$sModuleRight = $APPLICATION->GetGroupRight($module_id);
if (!CModule::IncludeModule('iblock') || $sModuleRight < 'R') {
return false;
}
if (
in_array(
$APPLICATION->GetCurPage(),
self::$urlPatterns[__FUNCTION__]['url']
)
&& intval($_REQUEST['IBLOCK_ID']) > 0
&& CIBlockSectionRights::UserHasRightTo($_REQUEST['IBLOCK_ID'], $_REQUEST['find_section_section'], 'element_edit')
) { ...