Права Доступа в Компонентах: работают не так, как ожидается; но можно накостылить патч

Если в настройках Раздела или Инфоблока NetCat попробовать дать доступ на изменение объекта ВСЕМ, ничего не получится. Просмотр и Добавление работают одним образом, а Изменение, Включение и Удаление -- другим.

Речь идет вот об этих настройках:

Если первые две строки касаются действительно всех, включая неавторизованных пользователей, то оставшиеся три имеют совершенно другую логику.

Это не глюк, а неточная формулировка.

Под понятием "настройки доступа Изменение -> ВСЕ" подразумевается, что изменять объекты могут все, кто является авторизованным владельцем объекта.

Если юзер-владелец объекта не совпадает с текущим авторизованным юзером, то у него не будет возможности редактировать объект, даже если в разделе настроены права, которые вы описали.

И по этой же причине неавторизованные юзера вообще не имеют прав на изменение каких бы то ни было объектов.

Эта же проблема есть в настройках полей компонента. Написано, дескать выберите, кому будет доступно поле - всем, админам или никому. А подразумевается, что речь идет только о добавлении и изменении объектов. А при просмотре объектов все поля для чтения доступны абсолютно всем, независимо от этой настройки. Это правильно, но формулировка сбивает с толку тех программистов, к то не в теме.

пояснил Руслан Густокашин (www.welpis.ru )

Спасибо за пояснения, Руслан!

Очень жаль, что все так сформулированно :(( И что рядом в одной таблице настроек находятся две функции (Добавление и Изменение), которые интуитивно должны работать идентично, а работают совершенно по-разному. И это при всем при том -- функционал ядра, самое базовое, что есть в NetCat, и оно вот так вот реализовано :((

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

Костыльное решение проблемы:

Пришлось создать фейкового юзера с правами на редактирование и модерирование нужного нам раздела, в шаблон навигации макета дизайна вставить функцию авто-авторизации этого юзера + рефреш страницы, срабатывающий ровно один раз.

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

if(!$AUTH_USER_ID){
  if($sub==216 && $action == 'change'){
    $nc_core = nc_Core::get_object();
    $nc_core->user->authorize_by_id(18); 
    header("Refresh:0");
  }
}

Код надо вставить в шаблон навигации макета дизайна, циферки заменить на актуальные для вашего сайта.

Блог

Что с Мастерхостом? Когда заработает?!

Этот вопрос всё чаще задают в Интернете начиная примерно с 12:00 дня 2 марта. А всё потому, что он накрылся!

далее

Автоматизированная Система Управления Бэкапами

Автоматизированная Система Управления Бэкапами позволяет добиться полного контроля над резервными копиями сайтов внутри инфраструктуры веб-студии. Если вы поддерживаете десятки сайтов на разных хостингах, без подобной системы вы не можете быть на 100% уверены в том, что каждый из них был корректно зарезервирован прошлой ночью.

далее

WebSocket: интеграция с NetCat

Хотите добавить на сайт под управлением CMS NetCat поддержку технологии WebSocket? Обращайтесь к нам! Посетители сайта смогут получать мгновенные уведомления о событиях сайта без обращений к серверу и перезагрузок страниц. Превратите свой сайт в интерактивную площадку, работающую в реальном времени!

далее

NetCat: техническая поддержка и доработка сайтов

Мы работаем с CMS NetCat уже больше 10 лет. У нас большой опыт и ответственный подход к делу.

далее

Весь блог тут