Форум сайта python.su
До недавнего времени для хранения каких либо дополнительных данных для объекта я сам создавал адаптер объекта к интерфейсу IAnnotations. И всегда с целью обхода системы безопасности делал этот адаптер trusted=“true”.
Но сегодня я столкнулся с подобным адаптером в стороннем модуле - plone.portlets. И он не был обозначен как trusted. Следовательно при работе адаптера с моими объектами вылетала ошибка:
ForbiddenAttribute: ('__annotations__', <my.object…>)
Единственный вариант который я придумал это переопределить регистрацию этого адаптера в своём overrides.zcml и сделать его trusted=“true”.
Но тогда возникает вопрос - а как тогда это работает в Plone? Поиском по всем zcml и py файлам установленного Plone не нашёл каких либо переопределений этого адаптера. Может есть какой то другой способ разрешить доступ к атрибуту __annotations__ ?
Отредактировано (Апрель 19, 2011 16:20:02)
Офлайн
Сегодня я понял как это работало в Plone. Там просто перед вызовом адаптера с объекта снимались все SecurityProxy с помощью функции aq_inner() из пакета Aquisition. Сразу я как то не разобрался для чего конкретно эта функция нужна, потому и возникло недопонимание. Сделал аналогичное действие с помощью функции zope.security.proxy.getObject(), подпилил напильником и всё заработало.
Офлайн
ох уж этот Aquisition
Офлайн