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


Выводить элементы определенному пользователю

0 голосов
Добрый вечер!

Как реализовать вывод элементов определенным пользователям?

- созданы элементы в закрытых разделах: 0, 1, 2.
Пользователи разбиты на группы 1, 2.
Неавторизованные видят все что в разделах 0.

Пользователи группы 1 должны видеть только те элементы которые им заданы через пользовательское свойство: - привязать к элементам инфоблока, UF_LIST

Где я выбрал несколько элементов из раздела 1 для группы пользователей 1. - выбрал для каждого пользователя разные элементы.

------------

И как теперь их вывести?

Списком новостей или каталогом?

Важное условие - эти элементы не видит никто кроме конкретного пользователя, группы 1.

------------
спросил 24 Апр, 16 от аноним

1 Ответ

0 голосов
Добрый день.
На самом деле вы пошли сложным путём. Реализация прав доступа в таком виде не только сложна, но и ещё очень ресурсоёмка.

Но в битриксе на инфоблоках реализована такая штука как "расширенные права доступа". Она активно используется в корпоративном портале для разграничения прав на документы. Позволяет задавать раздельные права доступа на каждую отдельную папку - и даже элемент инфоблока. Информация на эту тему - в презентации Максима Смирнова http://arconf.1c-bitrix.ru/summer2012/agenda/2800/#materials и кое-что в курсах http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=48&LESSON_ID=3212&sphrase_id=20376379

И, что самое приятное - нет никакой нужды реализовывать вручную фильтрацию элементов для пользователя. Стандартный GetList с фильтром CHECK_PERMISSIONS = Y сделает то, что нужно легко и быстро!
ответил 26 Апр, 16 от root (20,920 баллов)
Спасибо за ответ! Да, сложновато.
Кратко ознакомился с предложенным Вами вариантом, - довольно интересно. Попробую реализовать. А пока, я решил вопрос присвоения так:

Создал множественное свойство привязки к пользователю в инфоблоке новости.
Этому свойству в каждой конкретной новости/элементе - присваиваю определенных пользователей.

Вывожу в в компонент - эементы каталога, где ставлю фильтр:

$arrFilter = array("PROPERTY_USEREL" => $USER->GetID(),);

Весь код выглядит так:

<?
$arrFilter = array("PROPERTY_USEREL" => $USER->GetID(),);

$APPLICATION->IncludeComponent(
    "bitrix:catalog.section",
    ".default",
    array(
        "ACTION_VARIABLE" => "action",
        "ADD_PICT_PROP" => "-",
        "ADD_PROPERTIES_TO_BASKET" => "Y",
        "ADD_SECTIONS_CHAIN" => "N",
        "AJAX_MODE" => "N",
        "AJAX_OPTION_ADDITIONAL" => "",
        "AJAX_OPTION_HISTORY" => "N",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "BACKGROUND_IMAGE" => "-",
        "BASKET_URL" => "/personal/basket.php",
        "BROWSER_TITLE" => "-",
        "CACHE_FILTER" => "Y",
        "CACHE_GROUPS" => "Y",
        "CACHE_TIME" => "36000000",
        "CACHE_TYPE" => "A",
        "COMPONENT_TEMPLATE" => ".default",
        "DETAIL_URL" => "",
        "DISABLE_INIT_JS_IN_COMPONENT" => "N",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "DISPLAY_TOP_PAGER" => "N",
        "ELEMENT_SORT_FIELD" => "sort",
        "ELEMENT_SORT_FIELD2" => "id",
        "ELEMENT_SORT_ORDER" => "asc",
        "ELEMENT_SORT_ORDER2" => "desc",
        "FILTER_NAME" => "arrFilter",
        "IBLOCK_ID" => "22",
        "IBLOCK_TYPE" => "news",
        "INCLUDE_SUBSECTIONS" => "Y",
        "LABEL_PROP" => "-",
        "LINE_ELEMENT_COUNT" => "3",
        "MESSAGE_404" => "",
        "MESS_BTN_ADD_TO_BASKET" => "В корзину",
        "MESS_BTN_BUY" => "Купить",
        "MESS_BTN_DETAIL" => "Подробнее",
        "MESS_BTN_SUBSCRIBE" => "Подписаться",
        "MESS_NOT_AVAILABLE" => "Нет в наличии",
        "META_DESCRIPTION" => "-",
        "META_KEYWORDS" => "-",
        "OFFERS_LIMIT" => "5",
        "PAGER_BASE_LINK_ENABLE" => "N",
        "PAGER_DESC_NUMBERING" => "N",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
        "PAGER_SHOW_ALL" => "N",
        "PAGER_SHOW_ALWAYS" => "N",
        "PAGER_TEMPLATE" => ".default",
        "PAGER_TITLE" => "Товары",
        "PAGE_ELEMENT_COUNT" => "30",
        "PARTIAL_PRODUCT_PROPERTIES" => "N",
        "PRICE_CODE" => array(
        ),
        "PRICE_VAT_INCLUDE" => "Y",
        "PRODUCT_ID_VARIABLE" => "id",
        "PRODUCT_PROPERTIES" => array(
        ),
        "PRODUCT_PROPS_VARIABLE" => "prop",
        "PRODUCT_QUANTITY_VARIABLE" => "",
        "PROPERTY_CODE" => array(
            0 => "USEREL",
            1 => "",
        ),
        "SECTION_CODE" => "",
        "SECTION_ID" => $_REQUEST["SECTION_ID"],
        "SECTION_ID_VARIABLE" => "SECTION_ID",
        "SECTION_URL" => "",
        "SECTION_USER_FIELDS" => array(
            0 => "",
            1 => "",
        ),
        "SEF_MODE" => "N",
        "SET_BROWSER_TITLE" => "Y",
        "SET_LAST_MODIFIED" => "N",
        "SET_META_DESCRIPTION" => "Y",
        "SET_META_KEYWORDS" => "Y",
        "SET_STATUS_404" => "N",
        "SET_TITLE" => "Y",
        "SHOW_404" => "N",
        "SHOW_ALL_WO_SECTION" => "Y",
        "SHOW_PRICE_COUNT" => "1",
        "TEMPLATE_THEME" => "blue",
        "USE_MAIN_ELEMENT_SECTION" => "N",
        "USE_PRICE_COUNT" => "N",
        "USE_PRODUCT_QUANTITY" => "N"
    ),
    false
);?>

-----------------------

В результате определенному пользователю показываются только элементы присвоенные ему.
Ну а закрытый раздел уже ставлю на группу пользователей: группа1, группа2.

Получается что неавторизованные видят одни новости, а авторизованные другие в своем личном кабинете.
Управление продуктом: аналитика, разработка, продвижение