Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
mashi 11.11.2005 16:32 / 12.11.2005 22:15
Иногда приходят не желательные поля , с нежелательным значением и в нежелательном месте.name ending field_match # name :имя поля # ending :окончание ($request:uri без ?$request:query) для задания контекста # field_match :шаблон, которому должно соответствовать значение поля (regexp) # глобальные поля mode / xml|debug lang / ru|ua|en print / yes|no # поля новостей year news/ 2005|2006 month news/ 1|2|3|4|5|6|7|8|9|10|11|12 id news/ # поля публикаций year publication/ 2005|2006 month publication/ 1|2|3|4|5|6|7|8|9|10|11|12 id publication/_________________________________________________________________
@_form_filds_is_ok[permition_file][permited_filds;path;name_is_ok;context_is_ok;value_is_ok] # Если существует файл разрешений и REQUEST_METHOD = GET ^if(-f "$MAIN:DATA/$permition_file" && $env:REQUEST_METHOD eq "GET" && def $form:fields){ # загружаем таблицу разрешений для полей $permited_filds[^table::load[$MAIN:DATA/$permition_file]] # и переводим ее в хеш таблиц если она не пустая ^if(def $permited_filds){ $permited_filds[^permited_filds.hash[name][$.distinct[tables]]] # записываем в $path значение request:uri взятое до знака вопроса $path[^request:uri.split[?;lh]] $path[$path.0] ^try{ ^form:fields.foreach[field;value]{ # есил имя поля разрешено, то определяем разрешение для контекста и значения ^if(def $permited_filds.[$field]){ $name_is_ok(1) $context_is_ok(^permited_filds.[$field].locate($permited_filds.[$field].ending eq '^path.right(^permited_filds.[$field].ending.length[])')) # если контекст впорядке и задан шаблон для значения поля, то применяем его, иначе -- все значения подходят ^if($context_is_ok && def $permited_filds.[$field].field_match){ $value_is_ok(^value.match[$permited_filds.[$field].field_match]) }{ $value_is_ok(1) } }{ # обнуляем все признаки -- пришло не разрешенное имя поля $name_is_ok(0) $value_is_ok(0) $context_is_ok(0) } # если с имененм поля, его значением и его контекстом использования всё в порядке, то выдаем (1) ^if($name_is_ok && $context_is_ok && $value_is_ok){$result(1)}{^throw[field_name;bad field name]} } }{ ^if($exception.type eq "field_name"){ $exception.handled(1) $result(0) } } }{$result(1)} }{$result(1)} ##### End of @_form_filds_is_okЕсли этот метод отдает мне "0", то я посылаю пользователья на страницу №404.
@main[] ^if(!^_form_filds_is_ok[permited_fields.cfg]){ ^MAIN:location[http://mysite.ua/error404/] }