Annotation of basket/groups.py, revision 1.5
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:
1.5 ! dwinter 12: import smtplib
! 13:
! 14: def sendForm(self,fromaddr,subject,content,nextPage="index_html",RESPONSE=None):
! 15: """sendform"""
! 16: fromaddr=fromaddr.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden
! 17: subject=subject.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden
! 18: toaddrs=self.toAddrs
! 19:
! 20: subject="%s %s"%(self.subjectAdd,subject)
! 21:
! 22: msg = ("From: %s\r\nSubject: %s\r\nTo: %s\r\n\r\n"
! 23: % (fromaddr, subject, ", ".join(toaddrs)))
! 24: server = smtplib.SMTP("mail.mpiwg-berlin.mpg.de")
! 25: #server.set_debuglevel(1)
! 26: msg=msg+content
! 27: server.sendmail(fromaddr, toaddrs, msg)
! 28: server.quit()
! 29:
! 30: if RESPONSE:
! 31: RESPONSE.redirect(nextPage)
1.1 dwinter 32: class GroupFolder(Folder):
33: """Folder which contains groups"""
34:
35: meta_type="GroupFolder"
36:
1.2 dwinter 37: def registerNewUser(self,user,password,email='',forward_to=None,RESPONSE=None):
1.1 dwinter 38: """register a new user to the system, username and password, will be stored in the acl_users folder,
39: additional information are added here."""
40:
41: #TODO: check if user already exists in LDAP
1.2 dwinter 42: #TODO: email is not registered yet, because MPIWGUserfolder is not working with CookieCrumbler
1.1 dwinter 43: #print [x for x in repr(self.acl_users.getUserNames())]
1.5 ! dwinter 44:
! 45: if not (len(user.split("@")) ==2):
! 46: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddUserErrorInvalidEmail.zpt')).__of__(self)
! 47: return pt(user=user)
! 48:
! 49:
1.1 dwinter 50: if user in repr(self.acl_users.getUserNames()):
1.5 ! dwinter 51:
! 52: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddUserErrorAlreadyExists.zpt')).__of__(self)
! 53: return pt(user=user)
1.2 dwinter 54:
55: if user and password:
56: #self.acl_users.addUser(user,password,email)
57: self.aq_parent.acl_users._doAddUser(user, password, '', '')
58:
1.1 dwinter 59: add="user=%s"%user
60: if forward_to.find("?")>-1:
61: #already parameters
62: add="&"+add
63: else:
64: add="?"+add
65:
66: if RESPONSE and forward_to:
67: RESPONSE.redirect(forward_to+add)
68:
69: def isMemberOf(self,group):
70: user=SecurityManagement.getSecurityManager().getUser()
71:
72: if user and not (str(user)=='Anonymous User'):
73: return self.checkMembership(str(user), group)
74: return False
75:
1.4 dwinter 76: def addKommaListOfUsersToGroup(self,users,group,remove=None,REQUEST=None,RESPONSE=None):
1.2 dwinter 77: """add users to a group, users in komma separeted list"""
1.4 dwinter 78: usersList=[x.lstrip().rstrip() for x in users.split(",")]
79:
80: self.addUsersToGroups(usersList,group,remove)
1.2 dwinter 81:
82: if RESPONSE:
83: RESPONSE.redirect(REQUEST['HTTP_REFERER'])
84:
1.4 dwinter 85: def addUsersToGroups(self,users,groups,remove=None):
1.1 dwinter 86: """add users to groups
87: @param users: list of usernames
88: @param groups: list of groupnames
1.4 dwinter 89: @param remove: default None, if remove is set the actual
90: user list of the groups will be replaced by users otherwise users will be added.
91: if remove= protected then the actualuser can not be deleted.
1.1 dwinter 92: """
1.4 dwinter 93:
94: if type(groups) is not ListType:
95: groups=[groups]
96:
1.1 dwinter 97: for user in users:
98: self.addUserToGroups(user,groups)
99:
1.4 dwinter 100: if remove:
101: for group in groups:
102: for user in self.getGroupsAndUsers().get(group,None):
103: if (user not in users):
104: if not ((remove=="protected") and (user==self.getActualUserName())):
105: self.removeUserFromGroups(user,group)
1.1 dwinter 106:
1.4 dwinter 107: def removeUserFromGroups(self,user,groups):
108: '''
109: remove a user from a group
110: @param user: username
111: @param groups: list of groupnames
112: '''
113:
114: #make sure that list of groups
115: print "remove",user,repr(groups)
116:
117: if type(groups) is not ListType:
118: groups=[groups]
119:
120: groupObjects=self.ZopeFind(self,obj_ids=groups)
121: #group doesn't exist, return with false
122: if len(groupObjects)<1:
123: return False
124:
125: #otherwise add user to group
126: for groupObject in groupObjects:
127: groupObject[1].removeUser(user)
128:
1.1 dwinter 129: def addUserToGroups(self,user,groups):
130: '''
131: Add a user to a group
132: @param user: username
133: @param groups: list of groupnames
134: '''
135:
136: #make sure that list of groups
137:
138: if type(groups) is not ListType:
139: groups=[groups]
140:
141: groupObjects=self.ZopeFind(self,obj_ids=groups)
142: #group doesn't exist, return with false
143: if len(groupObjects)<1:
144: return False
145:
146: #otherwise add user to group
147: for groupObject in groupObjects:
148: groupObject[1].addUser(user)
149:
150: return True
151:
152: def addGroupsToGroups(self,newGroups,groups):
153: """
154: add Groups to groups
155: @param unewGroups: list of groups to be added
156: @param groups: list of groupnames
157: """
158:
159: for group in newGroups:
160: self.addGroupToGroups(group,groups)
161:
162:
163: def addGroupToGroups(self,group,groups):
164: '''
165: Add a user to a group
166: @param user: username
167: @param groups: list of groupnames
168: '''
169:
170: #make sure that list of groups
171:
172: if type(groups) is not ListType:
173: groups=[groups]
174:
175: groupObjects=self.ZopeFind(self,obj_ids=groups)
176: #group doesn't exist, return with false
177: if len(groupObjects)<1:
178: return False
179:
180: #otherwise add user to group
181: for groupObject in groupObjects:
182: groupObject[1].addGroup(group)
183:
184: return True
185:
186: def checkMembership(self,user,group):
187: '''Check if user is member of group
188:
189: @param user:
190: @param group:
191: '''
1.2 dwinter 192: print "checking publish for user:",user,group,self.aq_parent.getId()
193: ret=False
1.1 dwinter 194:
195: groups=self.ZopeFind(self,obj_metatypes=['Group'],obj_ids=[group])
196: #group doesn't exist
197:
1.2 dwinter 198: if group=="publish":
199: #special group, member is allowed to publish basket, at the moment all members of the admin group at root level
200: #member of publish
201:
202: return self.users.groupFolder.checkMembership(user,'admin')
203:
1.1 dwinter 204: if len(groups)<1:
1.2 dwinter 205: ret=False
1.1 dwinter 206: else:
1.2 dwinter 207: ret=groups[0][1].isInGroup(user)
1.1 dwinter 208:
1.2 dwinter 209: if (not ret) and (self.aq_parent.getId()!='users'):
210: #teste ob mitglied in super group
211: return self.users.groupFolder.checkMembership(user,'admin')
212: else:
213: return ret
214:
1.1 dwinter 215: def returnUsers(self):
216: """return all users of groups"""
217:
218: users={}
219: for group in self.ZopeFind(self,obj_metatypes=['Group']):
220: for user in group[1].getUsers():
221: if users.has_key(user):
222: users[user].append(group[0])
223: else:
224: users[user]=[group[0]]
225:
226: return users
227:
1.2 dwinter 228: def getGroupsAndUsers(self):
229: """return all groups and their users as dict"""
230:
231: users={}
232: for group in self.ZopeFind(self,obj_metatypes=['Group']):
233: for user in group[1].getUsers():
234: if users.has_key(group[0]):
235: if not (user in users[group[0]]):
236: users[group[0]].append(user)
237: else:
238: users[group[0]]=[user]
239: return users
240:
1.1 dwinter 241: def manage_addGroupFolderForm(self):
242: """form for adding a groupFolder"""
243: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroupFolder.zpt')).__of__(self)
244: return pt()
245:
246: def manage_addGroupFolder(self,id,RESPONSE=None):
247: """add a group folder object"""
248:
249:
250: newObj=GroupFolder(id)
251:
252: self._setObject(id,newObj)
253: ob=self._getOb(id)
254:
255:
256: #group folder always contains admin,editor,user
257:
258: manage_addGroup(ob,'admin')
259: manage_addGroup(ob,'editor')
260: manage_addGroup(ob,'user')
261:
262: #actual user is always editor and admin
263: user=str(self.REQUEST['AUTHENTICATED_USER'])
264:
265: ob.addUsersToGroups([user],['admin','editor'])
266:
267: #admin of supergrous are always admins of subgroups
268:
269: ob.addGroupsToGroups(['admin'],['admin'])
270:
271: if RESPONSE is not None:
272: RESPONSE.redirect('manage_main')
273:
274:
275: class Group(SimpleItem):
276: """Group"""
277:
278: meta_type="Group"
279:
1.3 dwinter 280:
281: manage_options=SimpleItem.manage_options+(
282: {'label':'change group members','action':'changeUsersInGroupForm'},
283: )
284:
1.1 dwinter 285: def __init__(self,id,description):
286: """init group"""
287: self.id=id
288: self.description=description
289: self.userList=[]
290: self.groupList=[]
291:
292: def addUser(self,username):
293: '''
294: add an username to the group
295: @param username:username
296: '''
297: #make sure that entry is persistent
298: list=self.userList
299: list.append(username)
300: self.userList=list[0:]
301:
1.2 dwinter 302: def removeUser(self,username):
303: """
304: remove an user from group
305: """
306: list=self.userList
307: list.remove(username)
308: self.userList=list[0:]
309:
310:
1.1 dwinter 311: def addGroup(self,group):
312: '''
313: add a group to the group
314: @param group: group to be added
315: '''
316: #make sure that entry is persistent
317: list=self.groupList
318: list.append(group)
319: self.groupList=list[0:]
320:
321:
322: def getGroups(self):
323: """get groups, whose members are automatically members of this group"""
324: return self.groupList
325:
326: def getUsers(self):
327: """ get Userlist """
328: return self.userList
329:
1.3 dwinter 330: def changeUsersInGroupForm(self):
331: """html form for changing the users"""
332: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeUsersInGroup.zpt')).__of__(self)
333: return pt()
334:
335: def changeUsersInGroup(self,userList,RESPONSE=None):
336: """change group"""
337: self.userList=userList.split(",")[0:]
338:
339: if RESPONSE is not None:
340: RESPONSE.redirect('manage_main')
341:
1.1 dwinter 342: def isInGroup(self,username):
343: '''
344: check if username is in group
345: @param username: username
346: '''
347:
348: #special handling of group 'user' all users are in user
349:
350: #TODO: only user which can log in are in 'user'
351: if self.id=="user":
352: return True
353:
354: #check first if user is in userList of this group
1.2 dwinter 355:
1.1 dwinter 356: if username in self.userList:
357: return True
358:
359: #check now if user is member of one of the groups in grouplist
360:
361: groupFolders=self.ZopeFind(self.aq_parent,obj_metatypes=['GroupFolder'])
362: #no groupFolder im parent
363:
364: if len(groupFolders)<1:
365: return False
366:
367: #checke all groups in grouplist
368: for group in self.ZopeFind(groupFolders[0][1],obj_metatype=['Group'],obj_ids=[self.groupList]):
369: if group[1].isInGroup(username):
370: return True
371:
372: return False
373:
374:
375:
376: def manage_addGroupForm(self):
377: """form for adding a groupFolder"""
378: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroup.zpt')).__of__(self)
379: return pt()
380:
381: def manage_addGroup(self,id,description='',RESPONSE=None):
382: """add a group folder object"""
383:
384:
385: newObj=Group(id,description)
386:
387: self._setObject(id,newObj)
388: ob=self._getOb(id)
389:
390: if RESPONSE is not None:
391: RESPONSE.redirect('manage_main')
392:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>