Support for user enable/disable

Adds a button in the users page for enabling/disabling, and disables the
edit page for disabled users because keystone throws 403 errors when
trying to fetch disabled users
This commit is contained in:
Mark Gius 2011-07-20 14:20:19 -07:00
parent fcb67d7981
commit ea4c6bf38e
4 changed files with 48 additions and 4 deletions

View File

@ -180,6 +180,7 @@ class Server(APIResourceWrapper):
def reboot(self, hardness=openstack.compute.servers.REBOOT_HARD):
compute_api(self.request).servers.reboot(self.id, hardness)
class ServerAttributes(APIDictWrapper):
"""Simple wrapper around openstackx.extras.server.Server attributes
@ -471,9 +472,11 @@ def tenant_update(request, tenant_id, description, enabled):
def token_create(request, tenant, username, password):
return Token(auth_api().tokens.create(tenant, username, password))
def tenant_quota_get(request, tenant):
return admin_api(request).quota_sets.get(tenant)
def token_info(request, token):
# TODO(mgius): This function doesn't make a whole lot of sense to me. The
# information being gathered here really aught to be attached to Token() as
@ -531,6 +534,10 @@ def user_update_email(request, user_id, email):
return User(account_api(request).users.update_email(user_id, email))
def user_update_enabled(request, user_id, enabled):
return User(account_api(request).users.update_enabled(user_id, enabled))
def user_update_password(request, user_id, password):
return User(account_api(request).users.update_password(user_id, password))

View File

@ -66,9 +66,32 @@ class UserDeleteForm(forms.SelfHandlingForm):
return redirect(request.build_absolute_uri())
class UserEnableDisableForm(forms.SelfHandlingForm):
id = forms.CharField(label="ID (username)", widget=forms.HiddenInput())
enabled = forms.ChoiceField(label="enabled", widget=forms.HiddenInput(),
choices=[[c, c]
for c in ("disable", "enable")])
def handle(self, request, data):
user_id = data['id']
enabled = data['enabled'] == "enable"
try:
api.user_update_enabled(request, user_id, enabled)
messages.info(request, "User %s %s" %
(user_id,
"enable" if enabled else "disable"))
except api_exceptions.ApiException:
messages.error(request, "Unable to %s user %s" %
("enable" if enabled else "disable",
user_id))
return redirect(request.build_absolute_uri())
@login_required
def index(request):
for f in (UserDeleteForm,):
for f in (UserDeleteForm, UserEnableDisableForm):
_, handled = f.maybe_handle(request)
if handled:
return handled
@ -81,10 +104,12 @@ def index(request):
e.message)
user_delete_form = UserDeleteForm()
return render_to_response('syspanel_users.html',{
user_enable_disable_form = UserEnableDisableForm()
return render_to_response('syspanel_users.html', {
'users': users,
'user_delete_form': user_delete_form,
}, context_instance = template.RequestContext(request))
'user_enable_disable_form': user_enable_disable_form,
}, context_instance=template.RequestContext(request))
@login_required

View File

@ -0,0 +1,9 @@
<form id="form_user_enable_disable{{user.id}}" class="form-enable_disable" method="post">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{hidden}}
{% endfor %}
<input name="id" type="hidden" value="{{user.id}}" />
<input name="enabled" type="hidden" value="{{ user.enabled|yesno:"disable,enable,None" }}" />
<input id="enable_{{user.id}}" class="enable" title="User: {{user.id}}" type="submit" value="{{ user.enabled|yesno:"Disable,Enable,Error" }}" />
</form>

View File

@ -23,13 +23,16 @@
</tr>
{% for user in users %}
<tr class="{% cycle 'odd' 'even' %}">
<td>{{user.id}}</td>
<td>{{user.id}}{% if not user.enabled %} (disabled){% endif %}</td>
<td>{{user.email}}</td>
<td>{{user.tenantId}}</td>
<td id="actions">
<ul>
<li class="form">{% include "_user_enable_disable.html" with form=user_enable_disable_form %}</li>
<li class="form">{% include "_user_delete.html" with form=user_delete_form %}</li>
{% if user.enabled %} <!-- Currently keystone throws 403 when getting or updating a user that is disabled -->
<li><a href="{% url syspanel_users_update user.id %}">Edit</a></li>
{% endif %}
</ul>
</td>
</tr>