(Dot)Liquid: возможно ли присвоение свойств модели представления или вызов методов модели представления?

Это вопрос безопасности Liquid с библиотекой DotLiquid.

Предположим, что моя модель представления выглядит примерно так (псевдокод):

class MyViewModel
    public string MyField
    public string MyMethod()

... и объект MyViewModel передается в шаблон Liquid, где MyField должен быть доступен из шаблона (чтобы шаблон мог читать его содержимое).

  1. Можно ли назначить MyField? Т.е. шаблон может модифицировать содержимое модели представления?
  2. Можно ли вызвать MyMethod()? Ни один элемент "MyMethod" не настроен как доступный из шаблона при его отображении.
  3. Что произойдет, если элемент "MyMethod" будет настроен так, чтобы он был доступен при отображении шаблона? Возможны ли вызовы методов из шаблонов Liquid?

Я предполагаю, что ответ "нет" на все вопросы, но я хотел бы быть уверен.

Спасибо.

1 ответ

Решение
  1. Нет, MyField не может быть назначен на. На самом деле, к нему нельзя получить доступ вообще - в DotLiquid доступны только общедоступные методы и свойства экземпляра.
  2. Это зависит от того, как вы "регистрируете" эту модель представления в DotLiquid:
    • Если модель представления наследуется от DotLiquid's Drop класс, тогда все общедоступные методы и свойства экземпляра будут доступны.
    • Если это не наследуется от Dropто вы, вероятно, будете использовать Template.RegisterSafeType(Type type, string[] allowedMembers) метод, который требует от вас сообщить DotLiquid, какие свойства и методы могут быть доступны (используя allowedMembers параметр).
  3. Да, вызовы методов возможны, но DotLiquid поддерживает только методы без параметров.
Другие вопросы по тегам