Back to index

plone3  3.1.7
Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Static Private Attributes
CMFCore.MembershipTool.MembershipTool Class Reference
Inheritance diagram for CMFCore.MembershipTool.MembershipTool:
Inheritance graph
[legend]
Collaboration diagram for CMFCore.MembershipTool.MembershipTool:
Collaboration graph
[legend]

List of all members.

Public Member Functions

def setPassword
def getAuthenticatedMember
def wrapUser
def getPortalRoles
def setRoleMapping
def getMappedRole
def getMembersFolder
def getMemberareaCreationFlag
def setMemberareaCreationFlag
def createMemberArea
def deleteMemberArea
def isAnonymousUser
def checkPermission
def credentialsChanged
def getMemberById
def listMemberIds
def listMembers
def searchMembers
def getCandidateLocalRoles
def setLocalRoles
def deleteLocalRoles
def addMember
def deleteMembers
def getHomeFolder
def getHomeUrl

Public Attributes

 role_map
 memberareaCreationFlag

Static Public Attributes

string id = 'portal_membership'
string meta_type = 'CMF Membership Tool'
int memberareaCreationFlag = 1
tuple security = ClassSecurityInfo()
tuple manage_options
tuple manage_overview = DTMLFile( 'explainMembershipTool', _dtmldir )
tuple manage_mapRoles = DTMLFile('membershipRolemapping', _dtmldir )
 createMemberarea = createMemberArea

Private Member Functions

def _huntUserFolder
def _huntUser
def __getPUS

Static Private Attributes

tuple __implements__ = (z2IMembershipTool, )

Detailed Description

This tool accesses member data through an acl_users object.

It can be replaced with something that accesses member data in a
different way.

Definition at line 57 of file MembershipTool.py.


Member Function Documentation

Definition at line 391 of file MembershipTool.py.

00391 
00392     def __getPUS(self):
00393         # Gets something we can call getUsers() and getUserNames() on.
00394         acl_users = self.acl_users
00395         if hasattr(acl_users, 'getUsers'):
00396             return acl_users
00397         else:
00398             # This hack works around the absence of getUsers() in LoginManager.
00399             # Gets the PersistentUserSource object that stores our users
00400             for us in acl_users.UserSourcesGroup.objectValues():
00401                 if us.meta_type == 'Persistent User Source':
00402                     return us.__of__(acl_users)

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool._huntUser (   self,
  username,
  context 
) [private]
Find user in the hierarchy of userfolders
   starting from context

Definition at line 383 of file MembershipTool.py.

00383 
00384     def _huntUser(self, username, context):
00385         """Find user in the hierarchy of userfolders
00386            starting from context
00387         """
00388         uf = self._huntUserFolder(username, context)
00389         if uf is not None:
00390             return uf.getUserById(username)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool._huntUserFolder (   self,
  username,
  context 
) [private]
Find userfolder containing user in the hierarchy
   starting from context

Definition at line 369 of file MembershipTool.py.

00369 
00370     def _huntUserFolder(self, username, context):
00371         """Find userfolder containing user in the hierarchy
00372            starting from context
00373         """
00374         uf = context.acl_users
00375         while uf is not None:
00376             user = uf.getUserById(username)
00377             if user is not None:
00378                 return uf
00379             container = aq_parent(aq_inner(uf))
00380             parent = aq_parent(aq_inner(container))
00381             uf = getattr(parent, 'acl_users', None)
00382         return None

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.addMember (   self,
  id,
  password,
  roles,
  domains,
  properties = None 
)
Adds a new member to the user folder.  Security checks will have
already been performed.  Called by portal_registration.

Definition at line 485 of file MembershipTool.py.

00485 
00486     def addMember(self, id, password, roles, domains, properties=None):
00487         '''Adds a new member to the user folder.  Security checks will have
00488         already been performed.  Called by portal_registration.
00489         '''
00490         acl_users = self.acl_users
00491         if hasattr(acl_users, '_doAddUser'):
00492             acl_users._doAddUser(id, password, roles, domains)
00493         else:
00494             # The acl_users folder is a LoginManager.  Search for a UserSource
00495             # with the needed support.
00496             for source in acl_users.UserSourcesGroup.objectValues():
00497                 if hasattr(source, 'addUser'):
00498                     source.__of__(self).addUser(id, password, roles, domains)
00499             raise "Can't add Member", "No supported UserSources"
00500 
00501         if properties is not None:
00502             member = self.getMemberById(id)
00503             member.setMemberProperties(properties)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.checkPermission (   self,
  permissionName,
  object,
  subobjectName = None 
)
Checks whether the current user has the given permission on
the given object or subobject.

Definition at line 318 of file MembershipTool.py.

00318 
00319     def checkPermission(self, permissionName, object, subobjectName=None):
00320         '''
00321         Checks whether the current user has the given permission on
00322         the given object or subobject.
00323         '''
00324         if subobjectName is not None:
00325             object = getattr(object, subobjectName)
00326         return _checkPermission(permissionName, object)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.createMemberArea (   self,
  member_id = '' 
)
Create a member area for 'member_id' or authenticated user.

Definition at line 246 of file MembershipTool.py.

00246 
00247     def createMemberArea(self, member_id=''):
00248         """ Create a member area for 'member_id' or authenticated user.
00249         """
00250         if not self.getMemberareaCreationFlag():
00251             return None
00252         members = self.getMembersFolder()
00253         if members is None:
00254             return None
00255         if self.isAnonymousUser():
00256             return None
00257         # Note: We can't use getAuthenticatedMember() and getMemberById()
00258         # because they might be wrapped by MemberDataTool.
00259         user = _getAuthenticatedUser(self)
00260         user_id = user.getId()
00261         if member_id in ('', user_id):
00262             member = user
00263             member_id = user_id
00264         else:
00265             if _checkPermission(ManageUsers, self):
00266                 uf = self._huntUserFolder(member_id, self)
00267                 if uf:
00268                     member = uf.getUserById(member_id).__of__(uf)
00269                 else:
00270                     raise ValueError('Member %s does not exist' % member_id)
00271             else:
00272                 return None
00273         if hasattr( aq_base(members), member_id ):
00274             return None
00275         else:
00276             f_title = "%s's Home" % member_id
00277             members.manage_addPortalFolder( id=member_id, title=f_title )
00278             f=getattr(members, member_id)
00279 
00280             f.manage_permission(View,
00281                                 ['Owner','Manager','Reviewer'], 0)
00282             f.manage_permission(AccessContentsInformation,
00283                                 ['Owner','Manager','Reviewer'], 0)
00284 
00285             # Grant Ownership and Owner role to Member
00286             f.changeOwnership(member)
00287             f.__ac_local_roles__ = None
00288             f.manage_setLocalRoles(member_id, ['Owner'])
00289         return f

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.credentialsChanged (   self,
  password,
  REQUEST = None 
)
Notifies the authentication mechanism that this user has changed
passwords.  This can be used to update the authentication cookie.
Note that this call should *not* cause any change at all to user
databases.

Definition at line 328 of file MembershipTool.py.

00328 
00329     def credentialsChanged(self, password, REQUEST=None):
00330         '''
00331         Notifies the authentication mechanism that this user has changed
00332         passwords.  This can be used to update the authentication cookie.
00333         Note that this call should *not* cause any change at all to user
00334         databases.
00335         '''
00336         # XXX: this method violates the rules for tools/utilities:
00337         # it depends on self.REQUEST
00338         if REQUEST is None:
00339             REQUEST = self.REQUEST
00340             warn("credentialsChanged should be called with 'REQUEST' as "
00341                  "second argument. The BBB code will be removed in CMF 2.3.",
00342                  DeprecationWarning, stacklevel=2)
00343 
00344         if not self.isAnonymousUser():
00345             acl_users = self.acl_users
00346             user = _getAuthenticatedUser(self)
00347             name = user.getUserName()
00348             # this really does need to be the user name, and not the user id,
00349             # because we're dealing with authentication credentials
00350             if hasattr(acl_users.aq_base, 'credentialsChanged'):
00351                 # Use an interface provided by LoginManager.
00352                 acl_users.credentialsChanged(user, name, password)
00353             else:
00354                 p = getattr(REQUEST, '_credentials_changed_path', None)
00355                 if p is not None:
00356                     # Use an interface provided by CookieCrumbler.
00357                     change = self.restrictedTraverse(p)
00358                     change(user, name, password)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.deleteLocalRoles (   self,
  obj,
  member_ids,
  reindex = 1,
  recursive = 0,
  REQUEST = None 
)
Delete local roles of specified members.

Definition at line 467 of file MembershipTool.py.

00467 
00468                          REQUEST=None):
00469         """ Delete local roles of specified members.
00470         """
00471         if _checkPermission(ChangeLocalRoles, obj):
00472             for member_id in member_ids:
00473                 if obj.get_local_roles_for_userid(userid=member_id):
00474                     obj.manage_delLocalRoles(userids=member_ids)
00475                     break
00476 
00477         if recursive and hasattr( aq_base(obj), 'contentValues' ):
00478             for subobj in obj.contentValues():
00479                 self.deleteLocalRoles(subobj, member_ids, 0, 1)
00480 
00481         if reindex:
00482             # reindexObjectSecurity is always recursive
00483             obj.reindexObjectSecurity()

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.deleteMemberArea (   self,
  member_id,
  REQUEST = None 
)
Delete member area of member specified by member_id.

Definition at line 295 of file MembershipTool.py.

00295 
00296     def deleteMemberArea(self, member_id, REQUEST=None):
00297         """ Delete member area of member specified by member_id.
00298         """
00299         members = self.getMembersFolder()
00300         if not members:
00301             return 0
00302         if hasattr( aq_base(members), member_id ):
00303             members.manage_delObjects(member_id)
00304             return 1
00305         else:
00306             return 0

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.deleteMembers (   self,
  member_ids,
  delete_memberareas = 1,
  delete_localroles = 1,
  REQUEST = None 
)
Delete members specified by member_ids.

Definition at line 507 of file MembershipTool.py.

00507 
00508                       delete_localroles=1, REQUEST=None):
00509         """ Delete members specified by member_ids.
00510         """
00511         # XXX: this method violates the rules for tools/utilities:
00512         # it depends on a non-utility tool
00513 
00514         # Delete members in acl_users.
00515         acl_users = self.acl_users
00516         if _checkPermission(ManageUsers, acl_users):
00517             if isinstance(member_ids, basestring):
00518                 member_ids = (member_ids,)
00519             member_ids = list(member_ids)
00520             for member_id in member_ids[:]:
00521                 if not acl_users.getUserById(member_id, None):
00522                     member_ids.remove(member_id)
00523             try:
00524                 acl_users.userFolderDelUsers(member_ids)
00525             except (AttributeError, NotImplementedError, 'NotImplemented'):
00526                 raise NotImplementedError('The underlying User Folder '
00527                                          'doesn\'t support deleting members.')
00528         else:
00529             raise AccessControl_Unauthorized('You need the \'Manage users\' '
00530                                  'permission for the underlying User Folder.')
00531 
00532         # Delete member data in portal_memberdata.
00533         mdtool = getToolByName(self, 'portal_memberdata', None)
00534         if mdtool is not None:
00535             for member_id in member_ids:
00536                 mdtool.deleteMemberData(member_id)
00537 
00538         # Delete members' home folders including all content items.
00539         if delete_memberareas:
00540             for member_id in member_ids:
00541                  self.deleteMemberArea(member_id)
00542 
00543         # Delete members' local roles.
00544         if delete_localroles:
00545             self.deleteLocalRoles( getUtility(ISiteRoot), member_ids,
00546                                    reindex=1, recursive=1 )
00547 
00548         return tuple(member_ids)

Here is the call graph for this function:

Here is the caller graph for this function:

Returns the currently authenticated member object
or the Anonymous User.  Never returns None.

Definition at line 113 of file MembershipTool.py.

00113 
00114     def getAuthenticatedMember(self):
00115         '''
00116         Returns the currently authenticated member object
00117         or the Anonymous User.  Never returns None.
00118         '''
00119         u = _getAuthenticatedUser(self)
00120         if u is None:
00121             u = nobody
00122         return self.wrapUser(u)

Here is the call graph for this function:

Here is the caller graph for this function:

What local roles can I assign?

Definition at line 428 of file MembershipTool.py.

00428 
00429     def getCandidateLocalRoles(self, obj):
00430         """ What local roles can I assign?
00431         """
00432         member = self.getAuthenticatedMember()
00433         member_roles = member.getRolesInContext(obj)
00434         if _checkPermission(ManageUsers, obj):
00435             local_roles = self.getPortalRoles()
00436             if 'Manager' not in member_roles:
00437                  local_roles.remove('Manager')
00438         else:
00439             local_roles = [ role for role in member_roles
00440                             if role not in ('Member', 'Authenticated') ]
00441         local_roles.sort()
00442         return tuple(local_roles)

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.getHomeFolder (   self,
  id = None,
  verifyPermission = 0 
)
Returns a member's home folder object or None.
Set verifyPermission to 1 to return None when the user
doesn't have the View permission on the folder.

Definition at line 550 of file MembershipTool.py.

00550 
00551     def getHomeFolder(self, id=None, verifyPermission=0):
00552         """Returns a member's home folder object or None.
00553         Set verifyPermission to 1 to return None when the user
00554         doesn't have the View permission on the folder.
00555         """
00556         return None

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.getHomeUrl (   self,
  id = None,
  verifyPermission = 0 
)
Returns the URL to a member's home folder or None.
Set verifyPermission to 1 to return None when the user
doesn't have the View permission on the folder.

Definition at line 558 of file MembershipTool.py.

00558 
00559     def getHomeUrl(self, id=None, verifyPermission=0):
00560         """Returns the URL to a member's home folder or None.
00561         Set verifyPermission to 1 to return None when the user
00562         doesn't have the View permission on the folder.
00563         """
00564         return None
00565 
00566 InitializeClass(MembershipTool)
def CMFCore.MembershipTool.MembershipTool.getMappedRole (   self,
  portal_role 
)
returns a role name if the portal role is mapped to
something else or an empty string if it is not

Definition at line 196 of file MembershipTool.py.

00196 
00197     def getMappedRole(self, portal_role):
00198         """
00199         returns a role name if the portal role is mapped to
00200         something else or an empty string if it is not
00201         """
00202         if hasattr(self, 'role_map'):
00203             return self.role_map.get(portal_role, '')
00204         else:
00205             return ''

Returns the flag indicating whether the membership tool
will create a member area if an authenticated user from
an underlying user folder logs in first without going
through the join process

Definition at line 215 of file MembershipTool.py.

00215 
00216     def getMemberareaCreationFlag(self):
00217         """
00218         Returns the flag indicating whether the membership tool
00219         will create a member area if an authenticated user from
00220         an underlying user folder logs in first without going
00221         through the join process
00222         """
00223         return self.memberareaCreationFlag

Here is the caller graph for this function:

Returns the given member.

Definition at line 360 of file MembershipTool.py.

00360 
00361     def getMemberById(self, id):
00362         '''
00363         Returns the given member.
00364         '''
00365         user = self._huntUser(id, self)
00366         if user is not None:
00367             user = self.wrapUser(user)
00368         return user

Here is the call graph for this function:

Here is the caller graph for this function:

Get the members folder object.

Definition at line 207 of file MembershipTool.py.

00207 
00208     def getMembersFolder(self):
00209         """ Get the members folder object.
00210         """
00211         parent = aq_parent( aq_inner(self) )
00212         members = getattr(parent, 'Members', None)
00213         return members

Here is the caller graph for this function:

Return all local roles defined by the portal itself,
which means roles that are useful and understood
by the portal object

Definition at line 161 of file MembershipTool.py.

00161 
00162     def getPortalRoles(self):
00163         """
00164         Return all local roles defined by the portal itself,
00165         which means roles that are useful and understood
00166         by the portal object
00167         """
00168         parent = self.aq_inner.aq_parent
00169         roles = list( parent.userdefined_roles() )
00170 
00171         # This is *not* a local role in the portal but used by it
00172         roles.append('Manager')
00173         roles.append('Owner')
00174 
00175         return roles

Here is the caller graph for this function:

Returns 1 if the user is not logged in.

Definition at line 308 of file MembershipTool.py.

00308 
00309     def isAnonymousUser(self):
00310         '''
00311         Returns 1 if the user is not logged in.
00312         '''
00313         u = _getAuthenticatedUser(self)
00314         if u is None or u.getUserName() == 'Anonymous User':
00315             return 1
00316         return 0

Here is the call graph for this function:

Here is the caller graph for this function:

Lists the ids of all members.  This may eventually be
replaced with a set of methods for querying pieces of the
list rather than the entire list at once.

Definition at line 404 of file MembershipTool.py.

00404 
00405     def listMemberIds(self):
00406         '''Lists the ids of all members.  This may eventually be
00407         replaced with a set of methods for querying pieces of the
00408         list rather than the entire list at once.
00409         '''
00410         user_folder = self.__getPUS()
00411         return [ x.getId() for x in user_folder.getUsers() ]

Here is the call graph for this function:

Gets the list of all members.

Definition at line 413 of file MembershipTool.py.

00413 
00414     def listMembers(self):
00415         '''Gets the list of all members.
00416         '''
00417         return map(self.wrapUser, self.__getPUS().getUsers())

Here is the call graph for this function:

Here is the caller graph for this function:

def CMFCore.MembershipTool.MembershipTool.searchMembers (   self,
  search_param,
  search_term 
)
Search the membership 

Definition at line 419 of file MembershipTool.py.

00419 
00420     def searchMembers( self, search_param, search_term ):
00421         """ Search the membership """
00422         # XXX: this method violates the rules for tools/utilities:
00423         # it depends on a non-utility tool
00424         md = getToolByName( self, 'portal_memberdata' )
00425 
00426         return md.searchMemberData( search_param, search_term )

Here is the call graph for this function:

def CMFCore.MembershipTool.MembershipTool.setLocalRoles (   self,
  obj,
  member_ids,
  member_role,
  reindex = 1,
  REQUEST = None 
)
Add local roles on an item.

Definition at line 446 of file MembershipTool.py.

00446 
00447                       REQUEST=None):
00448         """ Add local roles on an item.
00449         """
00450         if ( _checkPermission(ChangeLocalRoles, obj)
00451              and member_role in self.getCandidateLocalRoles(obj) ):
00452             for member_id in member_ids:
00453                 roles = list(obj.get_local_roles_for_userid( userid=member_id ))
00454 
00455                 if member_role not in roles:
00456                     roles.append( member_role )
00457                     obj.manage_setLocalRoles( member_id, roles )
00458 
00459         if reindex:
00460             # It is assumed that all objects have the method
00461             # reindexObjectSecurity, which is in CMFCatalogAware and
00462             # thus PortalContent and PortalFolder.
00463             obj.reindexObjectSecurity()

Here is the call graph for this function:

Here is the caller graph for this function:

sets the flag indicating whether the membership tool
will create a member area if an authenticated user from
an underlying user folder logs in first without going
through the join process

Definition at line 225 of file MembershipTool.py.

00225 
00226     def setMemberareaCreationFlag(self):
00227         """
00228         sets the flag indicating whether the membership tool
00229         will create a member area if an authenticated user from
00230         an underlying user folder logs in first without going
00231         through the join process
00232         """
00233         if not hasattr(self, 'memberareaCreationFlag'):
00234             self.memberareaCreationFlag = 0
00235 
00236         if self.memberareaCreationFlag == 0:
00237             self.memberareaCreationFlag = 1
00238         else:
00239             self.memberareaCreationFlag = 0
00240 
00241         return MessageDialog(
00242                title  ='Member area creation flag changed',
00243                message='Member area creation flag has been updated',
00244                action ='manage_mapRoles')

def CMFCore.MembershipTool.MembershipTool.setPassword (   self,
  password,
  domains = None,
  REQUEST = None 
)
Allows the authenticated member to set his/her own password.

Definition at line 96 of file MembershipTool.py.

00096 
00097     def setPassword(self, password, domains=None, REQUEST=None):
00098         '''Allows the authenticated member to set his/her own password.
00099         '''
00100         # XXX: this method violates the rules for tools/utilities:
00101         # it depends on a non-utility tool
00102         registration = getToolByName(self, 'portal_registration', None)
00103         if not self.isAnonymousUser():
00104             member = self.getAuthenticatedMember()
00105             if registration:
00106                 failMessage = registration.testPasswordValidity(password)
00107                 if failMessage is not None:
00108                     raise BadRequest(failMessage)
00109             member.setSecurityProfile(password=password, domains=domains)
00110         else:
00111             raise BadRequest('Not logged in.')

Here is the call graph for this function:

def CMFCore.MembershipTool.MembershipTool.setRoleMapping (   self,
  portal_role,
  userfolder_role,
  REQUEST = None 
)
set the mapping of roles between roles understood by
the portal and roles coming from outside user sources

Definition at line 178 of file MembershipTool.py.

00178 
00179     def setRoleMapping(self, portal_role, userfolder_role, REQUEST=None):
00180         """
00181         set the mapping of roles between roles understood by
00182         the portal and roles coming from outside user sources
00183         """
00184         if not hasattr(self, 'role_map'): self.role_map = PersistentMapping()
00185 
00186         if len(userfolder_role) < 1:
00187             del self.role_map[portal_role]
00188         else:
00189             self.role_map[portal_role] = userfolder_role
00190 
00191         return MessageDialog(
00192                title  ='Mapping updated',
00193                message='The Role mappings have been updated',
00194                action ='manage_mapRoles')

def CMFCore.MembershipTool.MembershipTool.wrapUser (   self,
  u,
  wrap_anon = 0 
)
Set up the correct acquisition wrappers for a user object.

Provides an opportunity for a portal_memberdata tool to retrieve and
store member data independently of the user object.

Definition at line 124 of file MembershipTool.py.

00124 
00125     def wrapUser(self, u, wrap_anon=0):
00126         """ Set up the correct acquisition wrappers for a user object.
00127 
00128         Provides an opportunity for a portal_memberdata tool to retrieve and
00129         store member data independently of the user object.
00130         """
00131         # XXX: this method violates the rules for tools/utilities:
00132         # it depends on a non-utility tool
00133         b = getattr(u, 'aq_base', None)
00134         if b is None:
00135             # u isn't wrapped at all.  Wrap it in self.acl_users.
00136             b = u
00137             u = u.__of__(self.acl_users)
00138         if (b is nobody and not wrap_anon) or hasattr(b, 'getMemberId'):
00139             # This user is either not recognized by acl_users or it is
00140             # already registered with something that implements the
00141             # member data tool at least partially.
00142             return u
00143 
00144         # Apply any role mapping if we have it
00145         if hasattr(self, 'role_map'):
00146             for portal_role in self.role_map.keys():
00147                 if (self.role_map.get(portal_role) in u.roles and
00148                         portal_role not in u.roles):
00149                     u.roles.append(portal_role)
00150 
00151         mdtool = getToolByName(self, 'portal_memberdata', None)
00152         if mdtool is not None:
00153             try:
00154                 u = mdtool.wrapUser(u)
00155             except ConflictError:
00156                 raise
00157             except:
00158                 logger.exception("Error during wrapUser")
00159         return u

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

tuple CMFCore.MembershipTool.MembershipTool.__implements__ = (z2IMembershipTool, ) [static, private]

Definition at line 66 of file MembershipTool.py.

Definition at line 291 of file MembershipTool.py.

string CMFCore.MembershipTool.MembershipTool.id = 'portal_membership' [static]

Definition at line 68 of file MembershipTool.py.

tuple CMFCore.MembershipTool.MembershipTool.manage_mapRoles = DTMLFile('membershipRolemapping', _dtmldir ) [static]

Definition at line 92 of file MembershipTool.py.

Initial value:
( ({ 'label' : 'Configuration'
                     , 'action' : 'manage_mapRoles'
                     },) +
                   ( { 'label' : 'Overview'
                     , 'action' : 'manage_overview'
                     },
                   ) + Folder.manage_options)

Definition at line 74 of file MembershipTool.py.

tuple CMFCore.MembershipTool.MembershipTool.manage_overview = DTMLFile( 'explainMembershipTool', _dtmldir ) [static]

Definition at line 86 of file MembershipTool.py.

Definition at line 70 of file MembershipTool.py.

Definition at line 233 of file MembershipTool.py.

string CMFCore.MembershipTool.MembershipTool.meta_type = 'CMF Membership Tool' [static]

Definition at line 69 of file MembershipTool.py.

Definition at line 183 of file MembershipTool.py.

tuple CMFCore.MembershipTool.MembershipTool.security = ClassSecurityInfo() [static]

Definition at line 72 of file MembershipTool.py.


The documentation for this class was generated from the following file: