Принятые Вами изменения могут вызвать ошибки в имеющихся плагинах и приложениях. Проверка в данном виде абсолютно
бессмысленна и даже вредна т.к. данные ограничения нигде не
задокументированы.
Проверка данных методов должна игнорироваться в классах плагинов и хэлперов.
Замените на что-то вроде этого:
public function isTrustedStaticClass($class_name, $compiler, $method = false)
{
$allowed = true;
$orig_class_name = $class_name;
$class_name = strtolower($class_name);
$orig_method = $method;
// Игноририруем классы плагинов и хэлперов
if (!in_array(substr($class_name, -6), array('plugin', 'helper'))) {
if ($method) {
list($method) = explode('(', $method);
$method = strtolower($method);
}
// Prohibited static classes
if (in_array($class_name, $this->static_classes) || in_array($class_name.'::'.$method, $this->static_classes)) {
$allowed = false;
}
// Smarty internals
elseif (substr($class_name, 0, 7) == 'smarty_') {
$allowed = false;
}
// Prohibited methods
elseif (in_array($method, array('getactive', 'getappconfig', 'setdebug', 'systemoption', '__set_state'))) {
$allowed = false;
} elseif ($method == 'getinstance' && $class_name != 'shopdimension') {
$allowed = false;
}
// Prohibited method masks
elseif (false !== strpos($method, 'model') || false !== strpos($method, 'factory')) {
$allowed = false;
}
elseif ($method != 'getplugininfo' && false !== strpos($method, 'getplugin')) {
$allowed = false;
}
}
if (!$allowed) {
$compiler->trigger_template_error("access to static method '{$orig_class_name}::{$orig_method}' not allowed by security setting");
}
return $allowed;
}
10 комментариев
Вот это костыль! ))))))))) Фреймворк не должен зависеть от приложений........
shopdimension? А так можно еще накидать из других приложений всяких классов исключений! Думаю надо выводить в конфиг это все....
Думаю надо сделать метод в waAppconfig, который будет возвращать список классов и методов запрещенных или разрешенных. что-то вроде getViewSecurity(). При инстансе приложения wa('app') добавлять в пул Представления список этих методов и классов из конфига приложения.
Как вам идея?
Идеи у тебя верные, вот только WA их не принимает. Хорошо если хотя бы такой дополненный вариант примут.
Вебасист принимает конструктив, но времени проверять и делать у них нет, работников мало.... Пошли вместе к ним устраиваться?)))
Проще запилить свой движок, чем допиливать это..
Сделайте, если это так просто.
Это не просто, но проще чем развивать WA - в своем проекте не надо ждать пару недель пока PR может быть добавят)
Глаза боятся, голова и руки делают!
А еще проще взять LARAVEL)))
Я имел ввиду именно создание приложений, само собой на базе какого-нибудь нормального фреймворка. С Laravel знаком плохо, а вот на Kohana, Codeinginer, Zend - легко)