started hosting permissions
This commit is contained in:
parent
c70c98ecc5
commit
a8b9e02ea5
10 changed files with 81 additions and 1 deletions
|
@ -57,6 +57,7 @@ INSTALLED_APPS = (
|
||||||
'stored_messages',
|
'stored_messages',
|
||||||
'mptt',
|
'mptt',
|
||||||
'parler',
|
'parler',
|
||||||
|
'guardian',
|
||||||
'taggit',
|
'taggit',
|
||||||
'taggit_autosuggest',
|
'taggit_autosuggest',
|
||||||
# 'django_select2',
|
# 'django_select2',
|
||||||
|
@ -182,6 +183,10 @@ DATABASES = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = (
|
||||||
|
'django.contrib.auth.backends.ModelBackend',
|
||||||
|
'guardian.backends.ObjectPermissionBackend',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Internationalization
|
# Internationalization
|
||||||
|
@ -460,3 +465,6 @@ if DEBUG:
|
||||||
from .local import *
|
from .local import *
|
||||||
else:
|
else:
|
||||||
from .prod import *
|
from .prod import *
|
||||||
|
|
||||||
|
|
||||||
|
GUARDIAN_GET_INIT_ANONYMOUS_USER = 'membership.models.get_anonymous_user_instance'
|
||||||
|
|
19
hosting/migrations/0026_auto_20160625_0028.py
Normal file
19
hosting/migrations/0026_auto_20160625_0028.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2016-06-25 00:28
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('hosting', '0025_auto_20160621_0522'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='virtualmachineplan',
|
||||||
|
options={'permissions': (('view_virtualmachineplan', 'View Virtual Machine Plan'), ('cancel_virtualmachineplan', 'Cancel Virtual Machine Plan'))},
|
||||||
|
),
|
||||||
|
]
|
|
@ -10,6 +10,7 @@ from stored_messages.settings import stored_messages_settings
|
||||||
|
|
||||||
from membership.models import StripeCustomer
|
from membership.models import StripeCustomer
|
||||||
from utils.models import BillingAddress
|
from utils.models import BillingAddress
|
||||||
|
from utils.mixins import AssignPermissionsMixin
|
||||||
from .managers import VMPlansManager
|
from .managers import VMPlansManager
|
||||||
|
|
||||||
|
|
||||||
|
@ -82,7 +83,7 @@ class VirtualMachineType(models.Model):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class VirtualMachinePlan(models.Model):
|
class VirtualMachinePlan(AssignPermissionsMixin, models.Model):
|
||||||
|
|
||||||
PENDING_STATUS = 'pending'
|
PENDING_STATUS = 'pending'
|
||||||
ONLINE_STATUS = 'online'
|
ONLINE_STATUS = 'online'
|
||||||
|
@ -104,6 +105,10 @@ class VirtualMachinePlan(models.Model):
|
||||||
(NODEJS, 'Debian, NodeJS'),
|
(NODEJS, 'Debian, NodeJS'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
permissions = ('virtualmachineplan.view_virtualmachineplan',
|
||||||
|
'virtualmachineplan.cancel_virtualmachineplan',
|
||||||
|
'virtualmachineplan.change_virtualmachineplan')
|
||||||
|
|
||||||
cores = models.IntegerField()
|
cores = models.IntegerField()
|
||||||
memory = models.IntegerField()
|
memory = models.IntegerField()
|
||||||
disk_size = models.IntegerField()
|
disk_size = models.IntegerField()
|
||||||
|
@ -116,6 +121,12 @@ class VirtualMachinePlan(models.Model):
|
||||||
|
|
||||||
objects = VMPlansManager()
|
objects = VMPlansManager()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
permissions = (
|
||||||
|
('view_virtualmachineplan', 'View Virtual Machine Plan'),
|
||||||
|
('cancel_virtualmachineplan', 'Cancel Virtual Machine Plan'),
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@ -142,6 +153,7 @@ class VirtualMachinePlan(models.Model):
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, data, user):
|
def create(cls, data, user):
|
||||||
instance = cls.objects.create(**data)
|
instance = cls.objects.create(**data)
|
||||||
|
instance.assign_permissions(user)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{% load static from staticfiles %}
|
||||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{% load static from staticfiles %}
|
||||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{% load static from staticfiles %}
|
||||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{% load static from staticfiles %}
|
||||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||||
|
|
|
@ -16,6 +16,11 @@ REGISTRATION_MESSAGE = {'subject': "Validation mail",
|
||||||
'from': 'test@test.com'}
|
'from': 'test@test.com'}
|
||||||
|
|
||||||
|
|
||||||
|
def get_anonymous_user_instance(User):
|
||||||
|
return User.register('Anonymous', None, 'anonymous@ungleich.ch')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MyUserManager(BaseUserManager):
|
class MyUserManager(BaseUserManager):
|
||||||
def create_user(self, email, name, password=None):
|
def create_user(self, email, name, password=None):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -19,6 +19,7 @@ django-polymorphic
|
||||||
model-mommy
|
model-mommy
|
||||||
pycryptodome
|
pycryptodome
|
||||||
django-stored-messages
|
django-stored-messages
|
||||||
|
django-guardian
|
||||||
|
|
||||||
#PLUGINS
|
#PLUGINS
|
||||||
djangocms_flash
|
djangocms_flash
|
||||||
|
|
31
utils/mixins.py
Normal file
31
utils/mixins.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
from guardian.shortcuts import assign_perm
|
||||||
|
|
||||||
|
|
||||||
|
class AssignPermissionsMixin(object):
|
||||||
|
permissions = tuple()
|
||||||
|
user = None
|
||||||
|
obj = None
|
||||||
|
kwargs = dict()
|
||||||
|
|
||||||
|
def assign_permissions(self, user):
|
||||||
|
for permission in self.permissions:
|
||||||
|
assign_perm(permission, user, self)
|
||||||
|
|
||||||
|
# def save(self, *args, **kwargs):
|
||||||
|
# self.kwargs = kwargs
|
||||||
|
# self.get_objs()
|
||||||
|
|
||||||
|
# create = False
|
||||||
|
# if not self.pk:
|
||||||
|
# create = True
|
||||||
|
|
||||||
|
# super(AssignPermissionsMixin, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
# if create:
|
||||||
|
# self.assign_permissions()
|
||||||
|
|
||||||
|
# def get_objs(self):
|
||||||
|
# self.user = self.kwargs.pop('user', None)
|
||||||
|
# self.obj = self.kwargs.pop('obj', None)
|
||||||
|
# assert self.user, 'Se necesita el parámetro user para poder asignar los permisos'
|
||||||
|
# assert self.obj, 'Se necesita el parámetro obj para poder asignar los permisos'
|
Loading…
Reference in a new issue