From 983dbaf91a54d0b212e66d467c526b7e1c562602 Mon Sep 17 00:00:00 2001 From: Retspen Date: Mon, 16 Mar 2015 11:57:55 +0200 Subject: [PATCH] Users permission --- instances/views.py | 59 ++++++---- templates/instance.html | 191 +++++++++++++++--------------- templates/instances.html | 242 +++++++++++++++++++++------------------ templates/user.html | 2 +- vrtManager/instance.py | 1 + 5 files changed, 270 insertions(+), 225 deletions(-) diff --git a/instances/views.py b/instances/views.py index 13175bd..44c211b 100644 --- a/instances/views.py +++ b/instances/views.py @@ -106,6 +106,24 @@ def instance(request, compute_id, vname): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) + error_messages = [] + messages = [] + compute = Compute.objects.get(id=compute_id) + computes = Compute.objects.all() + computes_count = len(computes) + keymaps = QEMU_KEYMAPS + console_types = QEMU_CONSOLE_TYPES + try: + userinstace = UserInstance.objects.get(instance__compute_id=compute_id, + instance__name=vname, + user__id=request.user.id) + except UserInstance.DoesNotExist: + userinstace = None + + if not request.user.is_superuser: + if not userinstace: + return HttpResponseRedirect(reverse('index')) + def show_clone_disk(disks): clone_disk = [] for disk in disks: @@ -120,14 +138,6 @@ def instance(request, compute_id, vname): {'dev': disk['dev'], 'storage': disk['storage'], 'image': image, 'format': disk['format']}) return clone_disk - error_messages = [] - messages = [] - compute = Compute.objects.get(id=compute_id) - computes = Compute.objects.all() - computes_count = len(computes) - keymaps = QEMU_KEYMAPS - console_types = QEMU_CONSOLE_TYPES - try: conn = wvmInstance(compute.hostname, compute.login, @@ -164,21 +174,17 @@ def instance(request, compute_id, vname): has_managed_save_image = conn.get_managed_save_image() clone_disks = show_clone_disk(disks) console_passwd = conn.get_console_passwd() - except libvirtError as lib_err: - error_messages.append(lib_err) - try: - instance = Instance.objects.get(compute_id=compute_id, name=vname) - if instance.uuid != uuid: - instance.uuid = uuid + try: + instance = Instance.objects.get(compute_id=compute_id, name=vname) + if instance.uuid != uuid: + instance.uuid = uuid + instance.save() + except Instance.DoesNotExist: + instance = Instance(compute_id=compute_id, name=vname, uuid=uuid) instance.save() - except Instance.DoesNotExist: - instance = Instance(compute_id=compute_id, name=vname, uuid=uuid) - instance.save() - try: if request.method == 'POST': - if 'poweron' in request.POST: conn.start() return HttpResponseRedirect(request.get_full_path() + '#poweron') @@ -209,8 +215,17 @@ def instance(request, compute_id, vname): if request.POST.get('delete_disk', ''): conn.delete_disk() finally: + if not request.user.is_superuser: + del_userinstance = UserInstance.objects.get(id=userinstace.id) + del_userinstance.delete() + else: + try: + del_userinstance = UserInstance.objects.filter(instance__compute_id=compute_id, instance__name=vname) + del_userinstance.save() + except UserInstance.DoesNotExist: + pass conn.delete() - return HttpResponseRedirect(reverse('instances', args=[compute_id])) + return HttpResponseRedirect(reverse('instances')) if 'snapshot' in request.POST: name = request.POST.get('name', '') @@ -330,7 +345,7 @@ def instance(request, compute_id, vname): conn.close() - except libvirtError as err: - error_messages.append(err) + except libvirtError as lib_err: + error_messages.append(lib_err) return render(request, 'instance.html', locals()) \ No newline at end of file diff --git a/templates/instance.html b/templates/instance.html index 7c135c4..118ba79 100644 --- a/templates/instance.html +++ b/templates/instance.html @@ -7,6 +7,26 @@

{{ vname }}

+ @@ -14,26 +34,6 @@
- - {% ifequal status 5 %} - {% trans "Off" %} - {% endifequal %} - {% ifequal status 1 %} - {% trans "Active" %} - {% endifequal %} - {% ifequal status 3 %} - {% trans "Suspend" %} - {% endifequal %} - - {% if cur_vcpu %}{{ cur_vcpu }}{% else %}{{ vcpu }}{% endif %} {% trans "Vcpu" %} - {{ cur_memory }}{% trans "MB" %} {% trans "Ram" %} - {% for disk in disks %} - {{ disk.size|filesizeformat }} {% trans "Disk" %} - {% endfor %} - - {{ description }} -
-