+ 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)
+
+
+ #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)