(Dot)Liquid: возможно ли присвоение свойств модели представления или вызов методов модели представления?
Это вопрос безопасности Liquid с библиотекой DotLiquid.
Предположим, что моя модель представления выглядит примерно так (псевдокод):
class MyViewModel
public string MyField
public string MyMethod()
... и объект MyViewModel передается в шаблон Liquid, где MyField должен быть доступен из шаблона (чтобы шаблон мог читать его содержимое).
- Можно ли назначить MyField? Т.е. шаблон может модифицировать содержимое модели представления?
- Можно ли вызвать MyMethod()? Ни один элемент "MyMethod" не настроен как доступный из шаблона при его отображении.
- Что произойдет, если элемент "MyMethod" будет настроен так, чтобы он был доступен при отображении шаблона? Возможны ли вызовы методов из шаблонов Liquid?
Я предполагаю, что ответ "нет" на все вопросы, но я хотел бы быть уверен.
Спасибо.
1 ответ
Решение
- Нет,
MyField
не может быть назначен на. На самом деле, к нему нельзя получить доступ вообще - в DotLiquid доступны только общедоступные методы и свойства экземпляра. - Это зависит от того, как вы "регистрируете" эту модель представления в DotLiquid:
- Если модель представления наследуется от DotLiquid's
Drop
класс, тогда все общедоступные методы и свойства экземпляра будут доступны. - Если это не наследуется от
Drop
то вы, вероятно, будете использоватьTemplate.RegisterSafeType(Type type, string[] allowedMembers)
метод, который требует от вас сообщить DotLiquid, какие свойства и методы могут быть доступны (используяallowedMembers
параметр).
- Если модель представления наследуется от DotLiquid's
- Да, вызовы методов возможны, но DotLiquid поддерживает только методы без параметров.