Added ‘view virtual machine plan ’ permission, Added ‘delete virtual machine plan’ permission , Added ‘view hosting order’ permission

This commit is contained in:
Levi 2016-07-10 22:08:51 -05:00
parent f024841c4e
commit 2852d3046c
7 changed files with 47 additions and 16 deletions

View file

@ -185,8 +185,8 @@ DATABASES = {
AUTHENTICATION_BACKENDS = ( AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend', 'guardian.backends.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend',
) )

View file

@ -30,6 +30,9 @@ class HostingOrderAdmin(admin.ModelAdmin):
# If the Stripe payment was successed, set order status approved # If the Stripe payment was successed, set order status approved
obj.set_approved() obj.set_approved()
# Assigning permissions
obj.assign_permissions(customer.user)
context = { context = {
'order': obj, 'order': obj,
'vm': obj.vm_plan, 'vm': obj.vm_plan,

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-07-11 02:10
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('hosting', '0026_auto_20160625_0028'),
]
operations = [
migrations.AlterModelOptions(
name='hostingorder',
options={'permissions': (('view_hostingorder', 'View Hosting Order'),)},
),
]

View file

@ -4,8 +4,6 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.functional import cached_property from django.utils.functional import cached_property
from Crypto.PublicKey import RSA from Crypto.PublicKey import RSA
from stored_messages.settings import stored_messages_settings from stored_messages.settings import stored_messages_settings
@ -106,9 +104,9 @@ class VirtualMachinePlan(AssignPermissionsMixin, models.Model):
(NODEJS, 'Debian, NodeJS'), (NODEJS, 'Debian, NodeJS'),
) )
permissions = ('virtualmachineplan.view_virtualmachineplan', permissions = ('view_virtualmachineplan',
'virtualmachineplan.cancel_virtualmachineplan', 'cancel_virtualmachineplan',
'virtualmachineplan.change_virtualmachineplan') 'change_virtualmachineplan')
cores = models.IntegerField() cores = models.IntegerField()
memory = models.IntegerField() memory = models.IntegerField()
@ -180,7 +178,7 @@ class VirtualMachinePlan(AssignPermissionsMixin, models.Model):
self.save(update_fields=['status']) self.save(update_fields=['status'])
class HostingOrder(models.Model): class HostingOrder(AssignPermissionsMixin, models.Model):
ORDER_APPROVED_STATUS = 'Approved' ORDER_APPROVED_STATUS = 'Approved'
ORDER_DECLINED_STATUS = 'Declined' ORDER_DECLINED_STATUS = 'Declined'
@ -194,6 +192,13 @@ class HostingOrder(models.Model):
cc_brand = models.CharField(max_length=10) cc_brand = models.CharField(max_length=10)
stripe_charge_id = models.CharField(max_length=100, null=True) stripe_charge_id = models.CharField(max_length=100, null=True)
permissions = ('view_hostingorder',)
class Meta:
permissions = (
('view_hostingorder', 'View Hosting Order'),
)
def __str__(self): def __str__(self):
return "%s" % (self.id) return "%s" % (self.id)
@ -205,6 +210,7 @@ class HostingOrder(models.Model):
def create(cls, vm_plan=None, customer=None, billing_address=None): def create(cls, vm_plan=None, customer=None, billing_address=None):
instance = cls.objects.create(vm_plan=vm_plan, customer=customer, instance = cls.objects.create(vm_plan=vm_plan, customer=customer,
billing_address=billing_address) billing_address=billing_address)
instance.assign_permissions(customer.user)
return instance return instance
def set_approved(self): def set_approved(self):

View file

@ -10,7 +10,7 @@
<meta name="description" content=""> <meta name="description" content="">
<meta name="author" content=""> <meta name="author" content="">
<title>nngleich</title> <title>ungleich</title>
<!-- Bootstrap Core CSS --> <!-- Bootstrap Core CSS -->
<link href="{% static 'hosting/css/bootstrap.min.css' %}" rel="stylesheet"> <link href="{% static 'hosting/css/bootstrap.min.css' %}" rel="stylesheet">

View file

@ -12,7 +12,7 @@ from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from django.conf import settings from django.conf import settings
from guardian.mixins import PermissionRequiredMixin
from stored_messages.settings import stored_messages_settings from stored_messages.settings import stored_messages_settings
from stored_messages.models import Message from stored_messages.models import Message
from stored_messages.api import mark_read from stored_messages.api import mark_read
@ -406,10 +406,11 @@ class PaymentVMView(LoginRequiredMixin, FormView):
return self.form_invalid(form) return self.form_invalid(form)
class OrdersHostingDetailView(LoginRequiredMixin, DetailView): class OrdersHostingDetailView(PermissionRequiredMixin, LoginRequiredMixin, DetailView):
template_name = "hosting/order_detail.html" template_name = "hosting/order_detail.html"
context_object_name = "order" context_object_name = "order"
login_url = reverse_lazy('hosting:login') login_url = reverse_lazy('hosting:login')
permission_required = ['view_hostingorder']
model = HostingOrder model = HostingOrder
@ -447,11 +448,12 @@ class VirtualMachinesPlanListView(LoginRequiredMixin, ListView):
return super(VirtualMachinesPlanListView, self).get_queryset() return super(VirtualMachinesPlanListView, self).get_queryset()
class VirtualMachineView(LoginRequiredMixin, UpdateView): class VirtualMachineView(PermissionRequiredMixin, LoginRequiredMixin, UpdateView):
template_name = "hosting/virtual_machine_detail.html" template_name = "hosting/virtual_machine_detail.html"
login_url = reverse_lazy('hosting:login') login_url = reverse_lazy('hosting:login')
model = VirtualMachinePlan model = VirtualMachinePlan
context_object_name = "virtual_machine" context_object_name = "virtual_machine"
permission_required = ['view_virtualmachineplan', 'cancel_virtualmachineplan']
fields = '__all__' fields = '__all__'
def get_success_url(self): def get_success_url(self):

View file

@ -17,7 +17,8 @@ REGISTRATION_MESSAGE = {'subject': "Validation mail",
def get_anonymous_user_instance(User): def get_anonymous_user_instance(User):
return User.register('Anonymous', None, 'anonymous@ungleich.ch') return CustomUser(name='Anonymous', email='anonymous@ungleich.ch',
validation_slug=make_password(None))
@ -108,10 +109,10 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
def __str__(self): # __unicode__ on Python 2 def __str__(self): # __unicode__ on Python 2
return self.email return self.email
def has_perm(self, perm, obj=None): # def has_perm(self, perm, obj=None):
"Does the user have a specific permission?" # "Does the user have a specific permission?"
# Simplest possible answer: Yes, always # # Simplest possible answer: Yes, always
return self.is_admin # return self.is_admin
def has_module_perms(self, app_label): def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?" "Does the user have permissions to view the app `app_label`?"