Вставить путь к файлу битрикс доступ
В Битрикс есть два уровня разграничения прав доступа:
- Доступ на файлы и каталоги.
- Права в рамках логики модуля.
Операции и уровни доступа в 1С-Битрикс УС
Сразу нужно запомнить — права в исходном коде УС называются не иначе как “operations” или “операции”, роли — “tasks” или “уровни доступа”. Управление операциями (их добавление или удаление) через панель управления невозможно — только через API системы (использование метода CModule::InstallTasks как раз является замечательным примером такого использования). А вот создание уровней доступа возможно не только через API, но и вручную, силами администратора или любого другого привилегированного пользователя по пути “Настройки->Пользователи->Уровни доступа”.
Эта страница должна быть знакома тем специалистам, которые хоть раз да настраивали на сайте доступ для “контент-менеджера” или “модератора” — сотрудников, у которых должен быть доступ в панель управления, но ограниченный. Такая настройка занимает совсем немного времени и не требует участия программиста.
В БУС нельзя напрямую назначать конкретные права на операции конкретным пользователям (в полном соответствии c RBAC ). Связь производится через два промежуточных звена — группы пользователя и уровни доступа. Проиллюстрируем эту связь ER-диаграммой.
Каждая операция характеризуется названием, принадлежностью к модулю, описанием и привязкой (о ней позже). Они задаются один раз, обычно при установке модуля, и редактированию более не подлежат.
Заметка для любопытных: операции хранятся в таблице БД b_operation.
Для создания уровня доступа необходимо задать ему имя, выбрать модуль, который он описывает и дать права на выполнение необходимых операций в этом модуле. Один уровень доступа описывает операции только одного модуля! Дополнительно можно указать букву уровня доступа (символьный код) и описание. Традиционно в стандартных модулях БУС используются следующие символьные коды:
- D для полного запрета
- R для чтения
- W для записи
- X для полного доступа
Еще раз отмечу, что это не правило, а наблюдение. Обратите внимание, уровни доступа, отсортированные по своим символьным кодам, обозначают возрастание привилегий. Нередко можно увидеть в исходниках БУС проверку вида “Если уровень доступа >= R” (вот зачем алфавитный порядок).
Созданные и настроенные уровни доступа хранятся в таблице БД b_task и b_task_operation.
Остальные шаги должны быть известны большинству специалистов по работе с 1С-Битрикс УС: нужно поместить пользователя в нужную нам группу и этой группе задать нужный уровень доступа в нашем модуле.
Например, создадим такую группу пользователей, у которых будет единственная привилегия — сброс кеша в публичной части сайта. И ничего кроме.
Управление кешем — операция главного модуля (main). Букву для уровня создавать не будем.
Теперь у нас есть уровень доступа к главному модулю “Чистильщик кеша”. Осталось закрепить уровень доступа за группой нужного пользователя и протестировать.
Как видно на экране, ничего кроме кнопки сброса кеша у нашего пользователя нет.
Теперь уже можно переходить к программированию.
Права и роли в ПО
Организация управления доступом на основе ролей (RBAC, Role Based Access Control) в ПО известна уже давно и в том или ином виде знакома большинству программистов. Почитать про нее можно в интернете, здесь же отметим ключевые ее особенности:
- Каждому пользователю системы присваивается Роль
- Каждая роль содержит набор Прав или Разрешений
- При выполнении любых операций происходит проверка именно Прав/Разрешений
Как настроить права доступа к управлению структурой
По команде Дополнительно > Показать права на доступ для > нужная группа отображается текущее право группы пользователей на доступ к папкам и файлам системы.
Настройка прав доступа к управлению структурой сайта выполняется в Менеджере файлов ( Контент > Структура сайта ). Для настройки прав:
- Перейдите в раздел Файлы и папки ( Контент > Структура сайта > Файлы и папки )
- Отметьте нужные элементы в Колонке флажков;
- Выберите действие Права на доступ продукта на панели групповых операций и нажать кнопку Применить:
В форме настройки прав доступа укажите уровень доступа каждой группы пользователей к выбранным файлам и папкам.
- Запрещен: доступ группы пользователей к каталогу или файлу будет закрыт;
- Чтение: пользователи группы смогут просмотривать информацию файла или каталога в публичном разделе сайта;
- Запись: пользователи смогут редактировать файлы;
- Документооборот: пользователям разрешено создавать и редактировать файлы через модуль Документооборот;
- Полный доступ: пользователи получают права не только на изменение каталогов или файлов, но и на управление правами доступа всех групп пользователей к ним;
- Наследовать: для настраиваемых каталогов или файлов будут назначены те же права, что и для вышележащих каталогов.
Обратите внимание: Если установлено право доступа Наследовать […], то реальное право доступа определяется полем Все группы, для которых уровень доступа Наследовать. Иными словами, по умолчанию для всех групп установлено только право на чтение (кроме администратора сайта, который может все).
Для настройки прав доступа к текущей директории (например, к корневой папке) нужно воспользоваться кнопкой Свойства папки, расположенной на контекстной панели:
Права групп пользователей на доступ к директории сайта наследуются всеми вложенными папками и файлами. Иными словами, задав право, скажем, на чтение одной папки, задаются права на чтение для всех вложенных в неё папок.
- Установим право на доступ к корневому каталогу для группы Редакторы сайта равным Чтение;
- Для всех вложенных папок и файлов, кроме папки /content/ (раздел Контент), установим право доступа для группы Редакторы сайта равным Наследовать [чтение]:
- Установим для группы пользователей Редакторы сайта право доступа к папке /content/ (раздел Контент) равным Запись, а для всех вложенных файлов и папок каталога /content/ установим право доступа для группы Редакторы сайта равным Наследовать [запись].
Управление доступом к файлам и папкам так же возможно и из публичного раздела Запрет на доступ к той или иной информации на сайте - достаточно частая операция. В "1С-Битрикс: Управление сайтом" создана гибкая система задачи прав на доступ к информации, вы всегда можете показать только то что хотите и кому хотите
Чтобы пользователь мог редактировать те или иные страницы/разделы и на панели управления были соответствующие кнопки, для требуемой группы пользователей необходимо установить права на запись:
Внимание! Для изменений контента в Публичной части сайта пользователи необходим доступ на чтение к папке /bitrix/admin . Это папка, в которой расположен визуальный HTML-редактор. Без этого редактирование будет возможно только в текстовом режиме.
Нельзя закрыть доступ только к определенным папкам в разделе "Файлы и папки" (так, чтобы они не отображались для какой-либо группы пользователей). Чтобы группа пользователей могла работать только с конкретными папками, а остальные не видела, нужно закрывать доступ ко всему разделу "Файлы и папки" и открывать этой группе доступ к конкретным папкам, давая прямые ссылки на эти папки (группа пользователей сможет работать по прямым ссылкам, но файловой структуры не увидит).
Права в рамках логики модуля
Если речь идет об обычных статичных публичных страницах, то к ним применяется только первый уровень доступа на файлы и каталоги.
Если пользователь имеет на файл как минимум право R (чтение) и если данный файл является функциональной частью того или иного модуля, то проверяется 2-ой уровень прав, задаваемый в настройках соответствующего модуля.
Например, при заходе на страницу «Список обращений» в техподдержке: администратор видит все обращения, сотрудник техподдержки — только те, за которые он ответственнен, а обычный пользователь — только свои обращения. Так работает право доступа в рамках логики модуля «Техподдержка».
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Компонент располагается в шаблоне дизайна сайта и определяет место расположения включаемых областей страниц и разделов. Также компонент может выводить содержимое произвольного файла (например, информацию об авторских правах, название компании и т.д.).
В визуальном редакторе компонент расположен по пути: Служебные • Включаемые области • Вставка включаемой области.
В файловой системе компонент расположен: bitrix/components/bitrix/include . Пример вызова:
AREA_FILE_SHOW — Показывать включаемую область. Возможные значения:
- sect : показывать для раздела, область будет являться включаемой для всего раздела;
- page : показывать для страницы, область будет являться включаемой только для текущей страницы;
- file : показывать информацию из файла. Если компонент расположить в шаблоне дизайна сайта, то информация из файла будет выводиться на всем сайте. Установка параметра доступна только пользователю с правами edit_php .
PATH — Путь к файлу области. Поле доступно, если выбрано «Показывать включаемую область из файла». Задается полный путь от корня сайта к файлу с информацией, которую надо вывести в этой части сайта.
AREA_FILE_RECURSIVE [Y|N] — Рекурсивное подключение включаемых областей разделов. Настройка доступна при отмеченной области «Показывать включаемую область» ( AREA_FILE_SHOW ) в значение для раздела ( sect ). При отмеченной опции включаемые области разделов будут подключаться рекурсивно, т.е. если в папке более низкого уровня есть своя включаемая область, то она будет показана. Если же текущий раздел не имеет своей включаемой области, то рекурсивно до корня сайта будут проверяться все разделы до самого верхнего и будет выведена первая встретившаяся включаемая область.
EDIT_TEMPLATE — Шаблон области по умолчанию. Доступны все шаблоны страниц, созданные в системе. Они располагаются в разделе
В данном поле можно указать любой другой файл в системе, указав полный путь к файлу-шаблону.
Доступ на файлы и каталоги
Этот уровень прав проверяется в прологе, задается с помощью специального файла .access.php , содержащего массив следующего формата:
- файл/каталог — имя файла или каталога, для которых назначаются права доступа;
- группа-пользователей — идентификатор группы пользователей, на которую распространяется данное право (допустимо использование символа * , что означает — для всех групп);
- право-доступа — поддерживаются следующие значения (в порядке возрастания):
- D — запрещён (при обращении к файлу доступ будет всегда запрещён);
- R — чтение (при обращении к файлу доступ будет разрешен);
- U — документооборот (файл может быть отредактирован в режиме документооборота);
- W — запись (файл может быть отредактирован непосредственно);
- X — полный доступ (подразумевает право на запись и модификацию прав доступа).
Если пользователь принадлежит нескольким группам, то берется максимальное право из всех прав доступа заданных для этих групп. Если для текущего файла или каталога явно не задан уровень прав, то берется уровень прав заданный для вышележащих каталогов.
Пример
При доступе к странице /admin/index.php пользователь, принадлежащий группе ID=3 , будет иметь доступ, а пользователю, принадлежащему группе ID=2 , будет в доступе отказано. При доступе к странице /index.php все посетители будут иметь доступ.
Привязки (BINDING)
Напоследок, вернемся к привязкам. Они не используются в совсем уж простых модулях — можно сказать, это продвинутый уровень.
Обратите внимание на права доступа из модуля Инфоблоков (пример кода в предыдущем разделе). У каждого уровня привязка не к модулю, а к объекту iblock. Как следствие, на странице списка уровней доступа системы (“Настройки->Пользователи->Уровни доступа”) модуль инфоблоков вообще не представлен. Но любой достаточно оптыный специалист скажет, что где-то он уже видел настройку прав доступа для инфоблоков. Но где же?
Ответ прост — модуль инфоблоков дает возможность назначать права каждому инфоблоку персонально и видеть вы это могли на вкладке Доступ при редактировании любого инфоблока и хранятся эти настройки в собственной таблице b_iblock_group.
Получается, что стандартные уровни доступа (с привязкой к модулю) редактируются в стандартном разделе панели управления, а для работы с любыми другими объектами вам нужно создавать свои собственные разделы “админки”. Получается, в 1С-Битрикс УС есть не только продуманная и удобная система прав доступа, но и база для создания своей собственной.
Автор выражает благодарность Сергею Покоеву и Павлу Машанову. Именно наши разговоры об управлении доступом вдохновили меня на эту статью.
Как отключить просмотр физической структуры
Для отключения просмотра физической структуры на странице настроек модуля Управление структурой ( Настройки > Настройки продукта > Настройки модулей > Управление структурой ) установите флажок в поле Не отображать раздел "Файлы и папки" в меню "Структура сайта" .
- либо в результате ошибки в настройках сайта ( Настройки > Настройки продукта > Сайты > Список сайтов ). Значение поля Путь к корневой папке веб-сервера для этого сайта не соответствует реальному пути к DOCUMENT_ROOT.
- либо на корневую папку сайта (DOCUMENT_ROOT) установлены права недостаточные для чтение её содержимого. В данном случае надо установить на папку наиболее полные права.
Пример создания включаемой области
Нужно добавить возможность изменения логотипа для контент-менеджера сайта. Включаем режим правки в правом верхнем углу общедоступной части сайта. Создаем тестовую страницу, чтобы не сломать случайно во время работы рабочую страницу сайта. Для этой страницы выбираем «Изменить страницу» и далее «В визуальном редакторе». Справа выбираем компонент «Служебные • Включаемые области • Вставить область» и перетаскиваем в рабочую область редактора.
В настройках компонента выбираем «Показывать включаемую область из файла» и задаем путь к файлу области /include/logo.php . Нажимаем «Сохранить» и получаем фрагмент кода вставки компонента. Нам только он и нужен, копируем фрагмент в буфер, а дальше жмем «Отменить» и «Выйти без сохранения».
Открываем файл шаблона сайта /local/templates/имя-шаблона/header.php на редактирование и заменяем html-код логотипа
на код вызова компонента
Теперь в режиме правки при наведении указателя мыши на логотип будет появляться подсказка «Изменить область». Кликаем и переходим к редактированию включаемой области. В визуальном редакторе загружаем файл логотипа в медиа библиотеку, выбираем его же для вставки в визуальный редактор, указываем дополнительные параметры: CSS-класс img-responsive и ссылку на главную страницу.
В результате получим html-код:
Собственно, это и будет содержимое файла /include/logo.php .
Неправильно захламлять корневую директорию сервера, поэтому перенес папку /include/ в папку шаблона по умолчанию .default и переименовал в include_area (следуя рекомендациям Битрикс). А вызов компонента заменил на:
Создал файл init.php в папке local/php_interface и определили в нем константу:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Система предусматривает возможность отключения просмотра физической структуры сайта в Административном разделе. Это может быть полезно по следующим соображениям:
- если у какой-то группы пользователей есть такие права администрирования, которые в принципе могут привести к негативным последствиям в случае неграмотных действий;
- если квалифицированный администратор сайта в отъезде, отпуске и т. д., то полезно скрыть физическую структуру, оберегая проект от непредвиденных случайностей;
- чтобы контент-менеджеры не пребывали в недоумении, почему одни и те же страницы, разделы могут быть отображены дважды (в рамках физической и логической структуры): пусть работают только с логической структурой.
Пример
При попытке открытия страницы /dir/index.php пользователь, принадлежащий группе ID=3 , будет иметь право доступа D (запрещено), пользователь из группы ID=2 будет иметь право R (чтение). Пользователь, принадлежащий обеим группам, будет иметь максимальный уровень доступа — R (чтение).
Пример решения проблемы
Была правильно создана группа и к ней приписан пользователь. Группе назначены следующие права доступа к административным частям модулей:
- Главный модуль - полный доступ;
- Управление структурой - полный доступ.
Решение: По умолчанию новые пользователи имеют только право чтения для всех папок сайта, кроме папки /bitrix/admin/ . Следовательно, для получения доступа вам необходимо установить права на чтение папки /bitrix/admin/ :
Часто нужно сохранить одни и те же данные в массив, но иметь разный индекс у элементов, для экономии места и ресурсов можно сохранять данные по ссылке, нужно помнить что так лучше делать когда данные нужны только для чтения в коде, т.к. при модификации таких массивов появятся трудно уловимые зависомости
Back-end Шпаргалка Битрикс
Подключение скриптов и стилей вне шаблона
Подключение скриптов и стилей в шаблоне
Подключение файлов
- Метод IncludeFile
- Компонент “включаемая область”
Стандартная проверка в подключаемых файлах
Переменные в шаблоне компонента (стандартное начало template.php)
Данные текущей страницы
Примеры применения констант
Вывод заголовка окна браузера
Вывод подключенных скриптов и стилей в head
Вывод панели администрирования в пользовательской части
Определение принадлежности к странице или разделу
Изменение размеров изображения
Получение объектов приложения, контекста и запроса
Подключение модулей
Композит
- Голосование компонента “ЗА” композит
- Выделение части кода для догрузки композитом
В шаблоне
В других частях сайта
Способ 1 — красивый
Способ 2 — статичный, для помещения в него компонентов и отложенных функций
Формирование ссылки для логина
Редирект
Проверка наличия группы у пользователя
AJAX в отдельном файле
Очистка буфера вывода
Если уровней вложенности буферов много, то может не сработать
Гарантированная очистка всех уровней вложенности буферов вывода
AJAX в странице или компоненте
Генерация пароля
Создание своей отложенной функции
Буферизация и вывод разметки в нужном месте
Помещение контента в буфер, для последующего его вывода:
Вывод буферизированной области в нужном месте ShowViewContent:
Передача данных формы
Стандартная проверка соответствия сессии
В разметке формы
В коде валидации формы проверяем
Добавление данных в кэш при кастомизации стандартных компонентов
В файлах result_modifier.php можно получить объект компонента и добавить нужные данные в кэш для последующего использования. Подробнее тут
Перенос скриптов в нижнюю часть страницы
В админке битрикса есть настройка, отвечающая за перенос всего JS в нижнюю часть страницы, активируется она по пути:
Настройки -> Настройки продукта -> Настройки модулей -> Главный модуль -> Переместить весь Javascript в конец страницы
Если активировать эту настройку, то Битрикс сформирует страницу, вырежет ВСЕ вхождения тега script и вставит их в нижнюю часть страницы. Такой подход устраивает не всегда, яркий пример — подключение google tag manager и прочих скриптов, которые должны быть в верхней части страницы.
Что бы настройка битрикса не меняла положение скрипта в коде нужно добавить атрибут data-skip-moving :
В декабре 2011 года компания 1С-Битрикс выпустила Управление Сайтом 11.0.10, и вывела управление правами доступа собственных модулей на новый уровень. К “классической триаде” обязательных методов любого модуля (InstallDB, InstallEvents и InstallFiles) добавился еще один, мало кому из программистов сегодня известный — InstallTasks. О нем и всех его аспектах и пойдет сегодня речь, но сначала немного теории.
API для работы с операциями и уровнями доступа
Чтобы ваш модуль при установке создал в системе нужные вам операции, необходимо внести следующие изменения в установщик вашего модуля (/bitrix/modules//install/index.php):
- в методе DoInstall вызвать метод InstallTasks (ну и в DoUninstall не забыть про UnInstallTasks);
- переопределить открытый метод GetModuleTasks. Пример кода из модуля Инфоблоков ниже.
Ключ массива — более или менее читаемый код уровня доступа, в нем есть ключи LETTER для буквы уровня доступа, BINDING для привязки операций и OPERATIONS для перечисления операций, которые входят в данный уровень доступа. Чтобы привязать операцию именно к модулю и работать с ней в обычном режиме, требуется либо не указывать ключ BINDING, либо указать там module.
Установка модуля пройдет без проблем и Ваши уровни появятся в панели управления в общем списке. Только вот у них не будет названия и описания. Вернее, они будут, только в том же виде, в котором вы их объявили в методе: iblock_deny, iblock_read и т.д.
Перевод этих строк происходит в файлах модуля /admin/task_description.php (для перевода уровней доступа) и /admin/operation_description.php (для перевода операций).
Содержимое файлов простое, по сути они должны возвращать данные следующего вида:
Ключи массива соответствуют ключам уровней и операций, а сами массивы содержат название и описание.
Эти файлы подключаются автоматически и не требуют дополнительных хлопот.
Осталось только использовать эти права по назначению — организовать в модуле их проверку.
Для этого есть системный булевый метод CUser::CanDoOperation. Чтобы получить все уровни, которые есть у пользователя, используйте метод CUser::GetAllOperations. Проверка прав использует кеширование в сессии пользователя, так что можно себя не ограничивать и не бояться порождать лишние запросы.
Небольшой пример: попробуем организовать доступ на сайте по следующей матрице прав.
Матрица показывает, какие права есть у какого пользователя в некой компании. Выделено три роли: Глава компании, начальник отдела и рядовой сотрудник. Базовых операций 4 (так же известны как CRUD — Create-Read-Update-Delete), но есть нюансы — например, просмотр доступен в двух вариантах, изменение тоже, часто учитывается принадлежность сотрудников к отделам.
Зная, что права могут поменяться, не будем при установке модуля создавать уровни доступа, только операции.
После анализа матрицы все выделенные операции объявляются в методе модуля GetModuleTasks.
После добавления языковых файлов и установки модуля все готово к воссозданию матрицы прав. Вот так выглядит уровень доступа “Начальник отдела”.
А так — “Глава компании”.
Осталось лишь в коде поставить нужные проверки методом CanDoOperation.
Читайте также: