вы можете использовать альтернативный подход, основанный на функции, предоставляемой членством портала. Создайте свой собственный объект UserFolder и сообщите членству портала, чтобы использовать его как тип папки пользователя. Для этого вам придется просто изменить настройки членства портала во время установки и включить «мое действие папки»:
def setup_membership(self, site):
portal_membership = getToolByName(site, 'portal_membership')
workflow = getMultiAdapter((site, site.REQUEST), name=u'plone_tools').workflow()
# setup member area
if not site.hasObject(USERS_FOLDER_ID):
site.invokeFactory('Folder', USERS_FOLDER_ID, **{'title':'Users'})
users_folder = site[USERS_FOLDER_ID]
users_folder.processForm()
# publish the users folder
...
users_folder.setExcludeFromNav(True)
users_folder.reindexObject()
# set members area folder
portal_membership.setMembersFolderById(USERS_FOLDER_ID)
# setup member area type
portal_membership.manage_setMemberAreaType('UserProfile')
# enable members memberarea creation
portal_membership.memberareaCreationFlag = 1
# enable the 'my folder' user action, etc...
...
Таким образом, вы будете по-прежнему использовать стандартный пользователь Plone, и вы получите полный контроль над вашим приложением, вы также можете выбрать, куда помещать объекты UserFolder (возможно, в папку/users), рабочие процессы, добавлять новые поля профиля и т. д. Не требуется мембраны.
У меня также было аналогичное требование для загрузки N и только макс. N вложений (или других объектов). Я предлагаю вам добавить обработчик событий для добавления объектов UserProfile. Таким образом, вы можете принудительно создать два или более вложения файлов и предоставить пользователю только разрешение на редактирование. Он не сможет добавлять другие вложения, и вы все еще используете стандартные файлы или объекты изображения, без необходимости иметь дело с хранилищем blob.
Это хорошо сработало для меня с проектом на основе архетипов, но для ловкости он должен быть таким же.
Надеюсь, что это может помочь :)