Скрытие xml и json данных на umi-cms для неавторизованных пользователей — различия между версиями
Whoa (обсуждение | вклад) |
Whoa (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 7: | Строка 7: | ||
Чтобы ограничить доступ к REST-протоколам udata, upage, uobject, usel и прочим, достаточно внести изменения в файл config.ini в корне сайта. | Чтобы ограничить доступ к REST-протоколам udata, upage, uobject, usel и прочим, достаточно внести изменения в файл config.ini в корне сайта. | ||
− | Например для доступа без ограничения к протоколу udata используется параметр: | + | Например, для доступа без ограничения к протоколу udata используется параметр: |
<source lang="ini"> | <source lang="ini"> | ||
Строка 13: | Строка 13: | ||
</source> | </source> | ||
− | Чтобы ограничить, нужно заменить этот параметр на | + | Чтобы ограничить, нужно заменить этот параметр на: |
<source lang="ini"> | <source lang="ini"> | ||
Строка 32: | Строка 32: | ||
upage.http.permissions = "admin" | upage.http.permissions = "admin" | ||
</source> | </source> | ||
− | |||
==Ограничение доступа к xml и json данным ({url}.xml или {url}.json)== | ==Ограничение доступа к xml и json данным ({url}.xml или {url}.json)== | ||
− | + | Для решения данной задачи нет параметров в config.ini. | |
− | |||
Для решения задачи нужно перехватывать событие отправки страницы в буфер, т.е. до отправки данных пользователю. | Для решения задачи нужно перехватывать событие отправки страницы в буфер, т.е. до отправки данных пользователю. | ||
Для начала нужно в файле config.ini включить отслеживание этого события: | Для начала нужно в файле config.ini включить отслеживание этого события: | ||
− | |||
<source lang="ini"> | <source lang="ini"> | ||
buffer-send-event-enable = "1" | buffer-send-event-enable = "1" | ||
</source> | </source> | ||
− | |||
Перехватка события (файл events.php в папке classes/modules/content шаблона, или custom_events.php в системной папке модуля): | Перехватка события (файл events.php в папке classes/modules/content шаблона, или custom_events.php в системной папке модуля): | ||
− | |||
<source lang="php"> | <source lang="php"> | ||
new umiEventListener('systemBufferSend', 'content', 'object_redirect'); | new umiEventListener('systemBufferSend', 'content', 'object_redirect'); | ||
Строка 53: | Строка 48: | ||
Права на доступ к макросу (permissions.php или permissions_custom.php): | Права на доступ к макросу (permissions.php или permissions_custom.php): | ||
− | |||
<source lang="php"> | <source lang="php"> | ||
$permissions= Array( | $permissions= Array( | ||
Строка 60: | Строка 54: | ||
</source> | </source> | ||
− | Сам макрос (в class.php или custom.php, закрывает доступ для всех, кроме | + | Сам макрос (в class.php или custom.php, закрывает доступ для всех, кроме суперпользователя): |
<source lang="php"> | <source lang="php"> | ||
public function object_redirect(iUmiEventPoint $oEventPoint) { | public function object_redirect(iUmiEventPoint $oEventPoint) { | ||
Строка 85: | Строка 79: | ||
− | [[category:Решение проблем и ошибок]] | + | [[category:Решение проблем и ошибок]] [[category:Написание кастомных макросов]] |
Текущая версия на 14:45, 21 ноября 2018
Статья предоставлена партнером UMI.CMS Шириевым Артуром
Актуально для версии 18.
Ограничение доступа к 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 данным ({url}.xml или {url}.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;
}