29
return (self.request.user.auth_method in self.request.cfg.auth_can_logout and
30
UserPrefBase.allowed(self) and self.request.user.isSuperUser())
29
return (UserPrefBase.allowed(self) and
30
self.request.user.isSuperUser() or
31
(not self.request._setuid_real_user is None and
32
(self.request._setuid_real_user.isSuperUser())))
32
34
def handle_form(self):
34
request = self.request
37
if form.has_key('cancel'):
40
if request.method != 'POST':
43
if not wikiutil.checkTicket(request, form['ticket']):
46
uid = form.get('selected_user', '')
48
return 'error', _("No user selected")
49
theuser = user.User(request, uid, auth_method='setuid')
50
if not theuser or not theuser.exists():
51
return 'error', _("No user selected")
52
# set valid to True so superusers can even switch
55
request._setuid_real_user = request.user
56
# now continue as the other user
57
request.user = theuser
58
return _("You can now change the settings of the selected user account; log out to get back to your account.")
36
form = self.request.form
41
if (wikiutil.checkTicket(self.request, self.request.form['ticket'][0])
42
and self.request.request_method == 'POST'):
43
uid = form.get('selected_user', [''])[0]
45
return 'error', _("No user selected")
46
theuser = user.User(self.request, uid, auth_method='setuid')
47
if not theuser or not theuser.exists():
48
return 'error', _("No user selected")
49
# set valid to True so superusers can even switch
52
self.request.session['setuid'] = uid
53
self.request._setuid_real_user = self.request.user
54
# now continue as the other user
55
self.request.user = theuser
56
return _("You can now change the settings of the selected user account; log out to get back to your account.")
60
60
def _user_select(self):
62
62
users = user.getUserList(self.request)
63
current_uid = self.request.user.id
64
if hasattr(self.request, '_setuid_real_user') and self.request._setuid_real_user:
65
realuid = self.request._setuid_real_user.id
67
realuid = self.request.user.id
65
if uid != current_uid:
66
70
name = user.User(self.request, id=uid).name
67
71
options.append((uid, name))
68
72
options.sort(lambda x, y: cmp(x[1].lower(), y[1].lower()))
74
size = min(5, len(options))
75
current_user = self.request.user.id
73
80
return _("You are the only user.")
76
size = min(10, len(options))
77
return util.web.makeSelection('selected_user', options, current_uid, size=size)
83
return util.web.makeSelection('selected_user', options, current_user, size=size)
79
85
def create_form(self):
80
86
""" Create the complete HTML form code. """
83
89
'assume the identity of another user.')))
85
91
ticket = wikiutil.createTicket(self.request)
86
self.make_row(_('Select User'), [self._user_select()], valign="top")
92
self.make_row('Select User', [self._user_select()], valign="top")
87
93
form.append(html.INPUT(type="hidden", name="ticket", value="%s" % ticket))
89
95
buttons = [html.INPUT(type="submit", name="select_user",