all in all front-end back-end linux web-services

Закрытие протоколов на umi-cms

Ограничение доступа к REST-протоколам

Чтобы ограничить доступ к REST-протоколам udata, upage, uobject, usel и прочим, достаточно внести изменения в файл config.ini в корне сайта.

Например для доступа без ограничения к протоколу udata используется параметр:

udata.http.allow = "1"

Чтобы ограничить, нужно заменить этот параметр на uobject.http.permissions = "".

Список возможных опций:

  • admin - доступно только администраторам сайта (администратор - пользователь, имеющий доступ к администрированию хотя бы одного модуля).
  • sv - доступно только супервайзерам.
  • auth - доступно только авторизованным пользователям.

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

uobject.http.permissions = "admin"
udata.http.permissions = "admin"
upage.http.permissions = "admin"

Ограничение доступа к xml и json данным.

К сожалению для решения данной задачи нет параметров в config.ini.

В итоге было решено перехватывать событие отправки страницы в буфер, т.е. до отправки данных пользователю.

Для начала нужно в файле config.ini включить отслеживание этого события:

buffer-send-event-enable = "1"

Перехватка события (файл events.php в папке classes/modules/content шаблона, или custom_events.php в системной папке модуля):

new umiEventListener('systemBufferSend', 'content', 'object_redirect');

Права на доступ к макросу (permissions.php или permissions_custom.php):

$permissions= Array(
'content' => array('object_redirect')
);

Сам макрос (class.php или custom.php):

public function object_redirect(iUmiEventPoint $oEventPoint) {
        if ($oEventPoint->getMode() === "before") {
                $buffer = outputBuffer::current();
                $hierarchy = umiHierarchy::getInstance();
                $path = getServer('REQUEST_URI');
                $permsCol = permissionsCollection::getInstance();
                $isSV = $permsCol->isSv();
                if (strpos($path, '.xml') !== false && !strpos($path, 'sitemap.xml') && !$isSV) {
                        $path = str_replace('.xml','',$path);
                        $buffer->status('301 Moved Permanently');
                        $buffer->redirect($path);
        }
                if (strpos($path, '.json') !== false && !$isSV) {
                        $path = str_replace('.json','',$path);
                        $buffer->status('301 Moved Permanently');
                        $buffer->redirect($path);
        }
    }
        return true;
}
06.02.2017

Комментарии

Бэкенд-разработка

«Невидимая магия»

Лучшее в разделе
15.10.2015 Сборник советов по umi-cms