Найти - Пользователи
Полная версия: BlueBream: Адаптер для получения IAnnotations
Начало » Zope/Plone/Bluebream » BlueBream: Адаптер для получения IAnnotations
1
Cykooz
До недавнего времени для хранения каких либо дополнительных данных для объекта я сам создавал адаптер объекта к интерфейсу IAnnotations. И всегда с целью обхода системы безопасности делал этот адаптер trusted=“true”.
Но сегодня я столкнулся с подобным адаптером в стороннем модуле - plone.portlets. И он не был обозначен как trusted. Следовательно при работе адаптера с моими объектами вылетала ошибка:

ForbiddenAttribute: ('__annotations__', <my.object…>)

Единственный вариант который я придумал это переопределить регистрацию этого адаптера в своём overrides.zcml и сделать его trusted=“true”.

Но тогда возникает вопрос - а как тогда это работает в Plone? Поиском по всем zcml и py файлам установленного Plone не нашёл каких либо переопределений этого адаптера. Может есть какой то другой способ разрешить доступ к атрибуту __annotations__ ?
Cykooz
Сегодня я понял как это работало в Plone. Там просто перед вызовом адаптера с объекта снимались все SecurityProxy с помощью функции aq_inner() из пакета Aquisition. Сразу я как то не разобрался для чего конкретно эта функция нужна, потому и возникло недопонимание. Сделал аналогичное действие с помощью функции zope.security.proxy.getObject(), подпилил напильником и всё заработало.
astoon
ох уж этот Aquisition
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB