X-Git-Url: https://scm.cri.mines-paristech.fr/git/Plinn.git/blobdiff_plain/8393e88f33f604ce16fb229cf7f116ac106e2b0f..ff6b092efb7356ee8f98cce22c489601ded30e0e:/MemberDataTool.py?ds=sidebyside diff --git a/MemberDataTool.py b/MemberDataTool.py index a2c25db..c83ff49 100755 --- a/MemberDataTool.py +++ b/MemberDataTool.py @@ -32,12 +32,15 @@ from Products.CMFCore.MemberDataTool import MemberDataTool as BaseTool from Products.CMFCore.MemberDataTool import MemberData as BaseData from Products.CMFCore.MemberDataTool import MemberAdapter as BaseMemberAdapter from zope.component import adapts +from zope.component import getUtility from zope.interface import implements from Products.CMFCore.interfaces import IMember +from Products.CMFCore.interfaces import IRegistrationTool # from Products.CMFCore.MemberDataTool import CleanupTemp -from Products.CMFCore.utils import getToolByName +#from Products.CMFCore.utils import getToolByName from Products.CMFCore.CMFCatalogAware import CMFCatalogAware from Products.CMFCore.DynamicType import DynamicType +from Products.CMFCore.exceptions import BadRequest from utils import formatFullName from permissions import SetMemberProperties, SetMemberPassword @@ -101,36 +104,24 @@ class MemberAdapter(BaseMemberAdapter, SimpleItem, DynamicType, CMFCatalogAware) def getMemberSortableFormat(self) : """ Return a specific format of full name for alphabetical sorting """ return self.getMemberFullName(nameBefore = 1).lower() - - -InitializeClass(MemberAdapter) - - -class MemberData (BaseData, DynamicType, CMFCatalogAware): - -## __implements__ = IMemberData - - portal_type = 'Member Data' - - security = ClassSecurityInfo() + + # security overload + security.declareProtected(SetMemberProperties, 'setMemberProperties') + def setMemberProperties(self, mapping): + super(MemberAdapter, self).setMemberProperties(mapping) + self.reindexObject() security.declareProtected(SetMemberPassword, 'setMemberPassword') def setMemberPassword(self, password, domains=None) : """ set member password """ - registration = getToolByName(self, 'portal_registration', None) - if registration: - failMessage = registration.testPasswordValidity(password) - if failMessage is not None: - raise 'Bad Request', failMessage - - user_folder = self.acl_users + registration = getUtility(IRegistrationTool) + failMessage = registration.testPasswordValidity(password) + if failMessage is not None : + raise BadRequest(failMessage) + self.setSecurityProfile(password=password, domains=domains) - if user_folder.meta_type == 'Group User Folder' : - self.changePassword(password) - - - #XXX restore the previous implementation for GRUF 2 I'll remove that later... + security.declarePrivate('setSecurityProfile') def setSecurityProfile(self, password=None, roles=None, domains=None): """Set the user's basic security profile""" @@ -138,60 +129,138 @@ class MemberData (BaseData, DynamicType, CMFCatalogAware): # This is really hackish. The Zope User API needs methods # for performing these functions. if password is not None: - u.__ = password + u.setPassword(password) if roles is not None: - u.roles = roles + u.setRoles(roles) if domains is not None: - u.domains = domains - - - def getMemberFullName(self, nameBefore=1) : - """ Return the best full name representation """ - memberName = self.getProperty('name', default='') - memberGivenName = self.getProperty('given_name', default='') - memberId = self.getProperty('id', default='') - return formatFullName(memberName, memberGivenName, memberId, nameBefore=nameBefore) - - def getMemberSortableFormat(self) : - """ Return a specific format of full name for alphabetical sorting """ - return self.getMemberFullName(nameBefore = 1).lower() - - - ## overload default security declaration - security.declareProtected(SetMemberProperties, 'setMemberProperties') - def setMemberProperties(self, mapping): - BaseData.setMemberProperties(self, mapping) - self.reindexObject() + u.setDomains(domains) security.declarePrivate('manage_beforeDelete') def manage_beforeDelete(self) : """ uncatalog object """ self.unindexObject() - + def _setPortalTypeName(self, pt) : """ Static Dynamic Type ;-) """ pass # user object interface # overloads to make methods not publishable - + def getUserName(self): - return BaseData.getUserName(self) + return super(MemberAdapter, self).getUserName() def getId(self): - return BaseData.getId(self) + return super(MemberAdapter, self).getId() def getRoles(self): - return BaseData.getRoles(self) + return self._user.aq_inner.getRoles() + # return super(MemberAdapter, self).getRoles() def getRolesInContext(self, object): - return BaseData.getRolesInContext(self, object) + return super(MemberAdapter, self).getRolesInContext(object) def getDomains(self): - return BaseData.getDomains(self) + return super(MemberAdapter, self).getDomains() def has_role(self, roles, object=None): - return BaseData.has_role(self, roles, object=None) + return super(MemberAdapter, self).has_role(roles, object=None) + +InitializeClass(MemberAdapter) + + +class MemberData (BaseData, DynamicType, CMFCatalogAware): + +## __implements__ = IMemberData + + portal_type = 'Member Data' + + security = ClassSecurityInfo() +# migré +# security.declareProtected(SetMemberPassword, 'setMemberPassword') +# def setMemberPassword(self, password, domains=None) : +# """ set member password """ +# +# registration = getToolByName(self, 'portal_registration', None) +# if registration: +# failMessage = registration.testPasswordValidity(password) +# if failMessage is not None: +# raise 'Bad Request', failMessage +# +# user_folder = self.acl_users +# self.setSecurityProfile(password=password, domains=domains) +# if user_folder.meta_type == 'Group User Folder' : +# self.changePassword(password) + + +#migré + #XXX restore the previous implementation for GRUF 2 I'll remove that later... +# security.declarePrivate('setSecurityProfile') +# def setSecurityProfile(self, password=None, roles=None, domains=None): +# """Set the user's basic security profile""" +# u = self.getUser() +# # This is really hackish. The Zope User API needs methods +# # for performing these functions. +# if password is not None: +# u.__ = password +# if roles is not None: +# u.roles = roles +# if domains is not None: +# u.domains = domains + +# migré +# def getMemberFullName(self, nameBefore=1) : +# """ Return the best full name representation """ +# memberName = self.getProperty('name', default='') +# memberGivenName = self.getProperty('given_name', default='') +# memberId = self.getProperty('id', default='') +# return formatFullName(memberName, memberGivenName, memberId, nameBefore=nameBefore) + +# migré +# def getMemberSortableFormat(self) : +# """ Return a specific format of full name for alphabetical sorting """ +# return self.getMemberFullName(nameBefore = 1).lower() + + +# migré +# ## overload default security declaration +# security.declareProtected(SetMemberProperties, 'setMemberProperties') +# def setMemberProperties(self, mapping): +# BaseData.setMemberProperties(self, mapping) +# self.reindexObject() + +# migré +# security.declarePrivate('manage_beforeDelete') +# def manage_beforeDelete(self) : +# """ uncatalog object """ +# self.unindexObject() + +# migré +# def _setPortalTypeName(self, pt) : +# """ Static Dynamic Type ;-) """ +# pass + +# migré +# # user object interface +# # overloads to make methods not publishable +# +# def getUserName(self): +# return BaseData.getUserName(self) +# +# def getId(self): +# return BaseData.getId(self) +# +# def getRoles(self): +# return BaseData.getRoles(self) +# +# def getRolesInContext(self, object): +# return BaseData.getRolesInContext(self, object) +# +# def getDomains(self): +# return BaseData.getDomains(self) +# +# def has_role(self, roles, object=None): +# return BaseData.has_role(self, roles, object=None)