Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2011 16:16:38

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

BlueBream: Адаптер для получения IAnnotations

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

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

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

Но тогда возникает вопрос - а как тогда это работает в Plone? Поиском по всем zcml и py файлам установленного Plone не нашёл каких либо переопределений этого адаптера. Может есть какой то другой способ разрешить доступ к атрибуту __annotations__ ?



Отредактировано (Апрель 19, 2011 16:20:02)

Офлайн

#2 Апрель 27, 2011 08:42:11

Cykooz
От:
Зарегистрирован: 2010-10-07
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

BlueBream: Адаптер для получения IAnnotations

Сегодня я понял как это работало в Plone. Там просто перед вызовом адаптера с объекта снимались все SecurityProxy с помощью функции aq_inner() из пакета Aquisition. Сразу я как то не разобрался для чего конкретно эта функция нужна, потому и возникло недопонимание. Сделал аналогичное действие с помощью функции zope.security.proxy.getObject(), подпилил напильником и всё заработало.



Офлайн

#3 Апрель 29, 2011 14:44:47

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

BlueBream: Адаптер для получения IAnnotations

ох уж этот Aquisition



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version