Annotation of basket/groups.py, revision 1.3

1.1       dwinter     1: """gruppenverwaltung fuer baskets, benutzer koennen verschiedenen gruppen zugeordnet werden"""
                      2: 
                      3: from OFS.Folder import Folder
                      4: from OFS.SimpleItem import SimpleItem
                      5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      6: from Globals import package_home
                      7: import os.path
                      8: from types import *
                      9: 
                     10: from AccessControl import SecurityManagement
                     11: 
                     12: class GroupFolder(Folder):
                     13:     """Folder which contains groups"""
                     14:     
                     15:     meta_type="GroupFolder"
                     16: 
1.2       dwinter    17:     def registerNewUser(self,user,password,email='',forward_to=None,RESPONSE=None):
1.1       dwinter    18:         """register a new user to the system, username and password, will be stored in the acl_users folder,
                     19:         additional information are added here."""
                     20:         
                     21:         #TODO: check if user already exists in LDAP
1.2       dwinter    22:         #TODO: email is not registered yet, because MPIWGUserfolder is not working with CookieCrumbler
1.1       dwinter    23:         #print [x for x in repr(self.acl_users.getUserNames())]
                     24:         if user in repr(self.acl_users.getUserNames()):
                     25:             return "ERROR: username already exists"
1.2       dwinter    26:         
                     27:         if user and password:
                     28:             #self.acl_users.addUser(user,password,email)
                     29:             self.aq_parent.acl_users._doAddUser(user, password, '', '')
                     30:             
1.1       dwinter    31:         add="user=%s"%user
                     32:         if forward_to.find("?")>-1:
                     33:             #already parameters
                     34:             add="&"+add
                     35:         else:
                     36:             add="?"+add
                     37:         
                     38:         if RESPONSE and forward_to:
                     39:             RESPONSE.redirect(forward_to+add)
                     40:             
                     41:     def isMemberOf(self,group):
                     42:         user=SecurityManagement.getSecurityManager().getUser()
                     43:         
                     44:         if user and not (str(user)=='Anonymous User'):
                     45:             return self.checkMembership(str(user), group)
                     46:         return False
                     47:     
1.2       dwinter    48:     def addKommaListOfUsersToGroup(self,users,group,REQUEST=None,RESPONSE=None):
                     49:         """add users to a group, users in komma separeted list"""
                     50:         usersList=users.split(",")
                     51:         self.addUsersToGroups(usersList,group)
                     52: 
                     53:         if RESPONSE:
                     54:             RESPONSE.redirect(REQUEST['HTTP_REFERER'])
                     55:     
1.1       dwinter    56:     def addUsersToGroups(self,users,groups):
                     57:         """add users to groups
                     58:         @param users: list of usernames
                     59:         @param groups: list of groupnames
                     60:         """
                     61:         for user in users:
                     62:             self.addUserToGroups(user,groups)
                     63:         
                     64:         
                     65:     def addUserToGroups(self,user,groups):
                     66:         '''
                     67:         Add a user to a group
                     68:         @param user: username
                     69:         @param groups: list of groupnames
                     70:         '''
                     71:         
                     72:         #make sure that list of groups
                     73:         
                     74:         if type(groups) is not ListType:
                     75:             groups=[groups]
                     76:             
                     77:         groupObjects=self.ZopeFind(self,obj_ids=groups)
                     78:         #group doesn't exist, return with false
                     79:         if len(groupObjects)<1:
                     80:             return False
                     81:         
                     82:         #otherwise add user to group
                     83:         for groupObject in groupObjects:
                     84:             groupObject[1].addUser(user)
                     85:         
                     86:         return True
                     87:     
                     88:     def addGroupsToGroups(self,newGroups,groups):
                     89:         """
                     90:         add Groups to groups
                     91:         @param unewGroups: list of groups to be added
                     92:         @param groups: list of groupnames
                     93:         """
                     94:         
                     95:         for group in newGroups:
                     96:             self.addGroupToGroups(group,groups)
                     97:         
                     98:         
                     99:     def addGroupToGroups(self,group,groups):
                    100:         '''
                    101:         Add a user to a group
                    102:         @param user: username
                    103:         @param groups: list of groupnames
                    104:         '''
                    105:         
                    106:         #make sure that list of groups
                    107:         
                    108:         if type(groups) is not ListType:
                    109:             groups=[groups]
                    110:             
                    111:         groupObjects=self.ZopeFind(self,obj_ids=groups)
                    112:         #group doesn't exist, return with false
                    113:         if len(groupObjects)<1:
                    114:             return False
                    115:         
                    116:         #otherwise add user to group
                    117:         for groupObject in groupObjects:
                    118:             groupObject[1].addGroup(group)
                    119:         
                    120:         return True
                    121:     
                    122:     def checkMembership(self,user,group):
                    123:         '''Check if user is member of group
                    124:         
                    125:         @param user:
                    126:         @param group:
                    127:         '''
1.2       dwinter   128:         print "checking publish for user:",user,group,self.aq_parent.getId()
                    129:         ret=False
1.1       dwinter   130:         
                    131:         groups=self.ZopeFind(self,obj_metatypes=['Group'],obj_ids=[group])
                    132:         #group doesn't exist
                    133:         
1.2       dwinter   134:         if group=="publish":
                    135:             #special group, member is allowed to publish basket, at the moment all members of the admin group at root level
                    136:             #member of publish
                    137:             
                    138:             return  self.users.groupFolder.checkMembership(user,'admin')
                    139:             
1.1       dwinter   140:         if len(groups)<1:
1.2       dwinter   141:             ret=False
1.1       dwinter   142:         else:
1.2       dwinter   143:             ret=groups[0][1].isInGroup(user)
1.1       dwinter   144:         
1.2       dwinter   145:         if (not ret) and (self.aq_parent.getId()!='users'):
                    146:             #teste ob mitglied in super group
                    147:             return self.users.groupFolder.checkMembership(user,'admin')
                    148:         else:
                    149:             return ret
                    150:             
1.1       dwinter   151:     def returnUsers(self):
                    152:         """return all users of groups"""
                    153:         
                    154:         users={}
                    155:         for group in self.ZopeFind(self,obj_metatypes=['Group']):
                    156:             for user in group[1].getUsers():
                    157:                 if users.has_key(user):
                    158:                     users[user].append(group[0])
                    159:                 else:
                    160:                     users[user]=[group[0]]
                    161:         
                    162:         return users
                    163:     
1.2       dwinter   164:     def getGroupsAndUsers(self):
                    165:         """return all groups and their users as dict"""
                    166:         
                    167:         users={}
                    168:         for group in self.ZopeFind(self,obj_metatypes=['Group']):
                    169:             for user in group[1].getUsers():
                    170:                 if users.has_key(group[0]):
                    171:                     if not (user in users[group[0]]):
                    172:                         users[group[0]].append(user)
                    173:                 else:
                    174:                     users[group[0]]=[user]
                    175:         return users
                    176:                     
1.1       dwinter   177: def manage_addGroupFolderForm(self):
                    178:     """form for adding a groupFolder"""
                    179:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroupFolder.zpt')).__of__(self)
                    180:     return pt()
                    181: 
                    182: def manage_addGroupFolder(self,id,RESPONSE=None):
                    183:     """add a group folder object"""
                    184: 
                    185:   
                    186:     newObj=GroupFolder(id)
                    187:     
                    188:     self._setObject(id,newObj)
                    189:     ob=self._getOb(id)
                    190:     
                    191:     
                    192:     #group folder always contains admin,editor,user
                    193:      
                    194:     manage_addGroup(ob,'admin') 
                    195:     manage_addGroup(ob,'editor') 
                    196:     manage_addGroup(ob,'user') 
                    197:     
                    198:     #actual user is always editor and admin
                    199:     user=str(self.REQUEST['AUTHENTICATED_USER'])
                    200:     
                    201:     ob.addUsersToGroups([user],['admin','editor'])
                    202:     
                    203:     #admin of supergrous are always admins of subgroups
                    204:     
                    205:     ob.addGroupsToGroups(['admin'],['admin'])
                    206:     
                    207:     if RESPONSE is not None:
                    208:         RESPONSE.redirect('manage_main')
                    209:      
                    210: 
                    211: class Group(SimpleItem):
                    212:     """Group"""
                    213: 
                    214:     meta_type="Group"
                    215:     
1.3     ! dwinter   216:     
        !           217:     manage_options=SimpleItem.manage_options+(
        !           218:         {'label':'change group members','action':'changeUsersInGroupForm'},
        !           219:         )
        !           220:     
1.1       dwinter   221:     def __init__(self,id,description):
                    222:         """init group"""
                    223:         self.id=id
                    224:         self.description=description
                    225:         self.userList=[]
                    226:         self.groupList=[]
                    227:         
                    228:     def addUser(self,username):
                    229:         '''
                    230:         add an username to the group        
                    231:         @param username:username
                    232:         '''
                    233:         #make sure that entry is persistent
                    234:         list=self.userList
                    235:         list.append(username)
                    236:         self.userList=list[0:]
                    237:         
1.2       dwinter   238:     def removeUser(self,username):
                    239:         """
                    240:         remove an user from group
                    241:         """
                    242:         list=self.userList
                    243:         list.remove(username)
                    244:         self.userList=list[0:]
                    245:         
                    246:         
1.1       dwinter   247:     def addGroup(self,group):
                    248:         '''
                    249:         add a group to the group
                    250:         @param group: group to be added
                    251:         '''
                    252:         #make sure that entry is persistent
                    253:         list=self.groupList
                    254:         list.append(group)
                    255:         self.groupList=list[0:]
                    256:         
                    257:         
                    258:     def getGroups(self):
                    259:         """get groups, whose members are automatically members of this group"""
                    260:         return self.groupList
                    261:     
                    262:     def getUsers(self):
                    263:         """ get Userlist """
                    264:         return self.userList
                    265:     
1.3     ! dwinter   266:     def changeUsersInGroupForm(self):
        !           267:         """html form for changing the users"""
        !           268:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeUsersInGroup.zpt')).__of__(self)
        !           269:         return pt()
        !           270:     
        !           271:     def changeUsersInGroup(self,userList,RESPONSE=None):
        !           272:         """change group"""
        !           273:         self.userList=userList.split(",")[0:]
        !           274:     
        !           275:         if RESPONSE is not None:
        !           276:             RESPONSE.redirect('manage_main')
        !           277:             
1.1       dwinter   278:     def isInGroup(self,username):
                    279:         '''
                    280:         check if username is in group
                    281:         @param username: username
                    282:         '''
                    283:         
                    284:         #special handling of group 'user' all users are in user
                    285:         
                    286:         #TODO: only user which can log in are in 'user'
                    287:         if self.id=="user":
                    288:             return True
                    289:         
                    290:         #check first if user is in userList of this group
1.2       dwinter   291:         
1.1       dwinter   292:         if username in self.userList:
                    293:             return True
                    294:         
                    295:         #check now if user is member of one of the groups in grouplist
                    296:         
                    297:         groupFolders=self.ZopeFind(self.aq_parent,obj_metatypes=['GroupFolder'])
                    298:         #no groupFolder im parent
                    299:         
                    300:         if len(groupFolders)<1:
                    301:             return False
                    302:         
                    303:         #checke all groups in grouplist
                    304:         for group in self.ZopeFind(groupFolders[0][1],obj_metatype=['Group'],obj_ids=[self.groupList]):
                    305:             if group[1].isInGroup(username):
                    306:                 return True
                    307:         
                    308:         return False
                    309:         
                    310: 
                    311:         
                    312: def manage_addGroupForm(self):
                    313:     """form for adding a groupFolder"""
                    314:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroup.zpt')).__of__(self)
                    315:     return pt()
                    316: 
                    317: def manage_addGroup(self,id,description='',RESPONSE=None):
                    318:     """add a group folder object"""
                    319: 
                    320:     
                    321:     newObj=Group(id,description)
                    322:     
                    323:     self._setObject(id,newObj)
                    324:     ob=self._getOb(id)
                    325:     
                    326:     if RESPONSE is not None:
                    327:         RESPONSE.redirect('manage_main')
                    328:   

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>