Annotation of basket/groups.py, revision 1.2

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:     
                    216:     def __init__(self,id,description):
                    217:         """init group"""
                    218:         self.id=id
                    219:         self.description=description
                    220:         self.userList=[]
                    221:         self.groupList=[]
                    222:         
                    223:     def addUser(self,username):
                    224:         '''
                    225:         add an username to the group        
                    226:         @param username:username
                    227:         '''
                    228:         #make sure that entry is persistent
                    229:         list=self.userList
                    230:         list.append(username)
                    231:         self.userList=list[0:]
                    232:         
1.2     ! dwinter   233:     def removeUser(self,username):
        !           234:         """
        !           235:         remove an user from group
        !           236:         """
        !           237:         list=self.userList
        !           238:         list.remove(username)
        !           239:         self.userList=list[0:]
        !           240:         
        !           241:         
1.1       dwinter   242:     def addGroup(self,group):
                    243:         '''
                    244:         add a group to the group
                    245:         @param group: group to be added
                    246:         '''
                    247:         #make sure that entry is persistent
                    248:         list=self.groupList
                    249:         list.append(group)
                    250:         self.groupList=list[0:]
                    251:         
                    252:         
                    253:     def getGroups(self):
                    254:         """get groups, whose members are automatically members of this group"""
                    255:         return self.groupList
                    256:     
                    257:     def getUsers(self):
                    258:         """ get Userlist """
                    259:         return self.userList
                    260:     
                    261:     def isInGroup(self,username):
                    262:         '''
                    263:         check if username is in group
                    264:         @param username: username
                    265:         '''
                    266:         
                    267:         #special handling of group 'user' all users are in user
                    268:         
                    269:         #TODO: only user which can log in are in 'user'
                    270:         if self.id=="user":
                    271:             return True
                    272:         
                    273:         #check first if user is in userList of this group
1.2     ! dwinter   274:         
1.1       dwinter   275:         if username in self.userList:
                    276:             return True
                    277:         
                    278:         #check now if user is member of one of the groups in grouplist
                    279:         
                    280:         groupFolders=self.ZopeFind(self.aq_parent,obj_metatypes=['GroupFolder'])
                    281:         #no groupFolder im parent
                    282:         
                    283:         if len(groupFolders)<1:
                    284:             return False
                    285:         
                    286:         #checke all groups in grouplist
                    287:         for group in self.ZopeFind(groupFolders[0][1],obj_metatype=['Group'],obj_ids=[self.groupList]):
                    288:             if group[1].isInGroup(username):
                    289:                 return True
                    290:         
                    291:         return False
                    292:         
                    293: 
                    294:         
                    295: def manage_addGroupForm(self):
                    296:     """form for adding a groupFolder"""
                    297:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroup.zpt')).__of__(self)
                    298:     return pt()
                    299: 
                    300: def manage_addGroup(self,id,description='',RESPONSE=None):
                    301:     """add a group folder object"""
                    302: 
                    303:     
                    304:     newObj=Group(id,description)
                    305:     
                    306:     self._setObject(id,newObj)
                    307:     ob=self._getOb(id)
                    308:     
                    309:     if RESPONSE is not None:
                    310:         RESPONSE.redirect('manage_main')
                    311:   

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