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…
	
	Add table
		Add a link
		
	
		Reference in a new issue