blob: 1031e1265864db14d0c629e224af89964a8471b6 [file] [log] [blame]
Tony Mack06c8e472014-11-30 15:53:08 -05001import os
2import datetime
3from collections import defaultdict
4from django.db import models
5from django.db.models import F, Q
6from core.models import PlCoreBase,User,Controller
Tony Mack50e12212015-03-09 13:03:56 -04007from core.models.plcorebase import StrippedCharField
Tony Mack06c8e472014-11-30 15:53:08 -05008from core.models import Controller,ControllerLinkManager,ControllerLinkDeletionManager
9
Tony Mack3066a952015-01-05 22:48:11 -050010class ControllerUser(PlCoreBase):
Tony Mack06c8e472014-11-30 15:53:08 -050011 objects = ControllerLinkManager()
12 deleted_objects = ControllerLinkDeletionManager()
13
14 user = models.ForeignKey(User,related_name='controllerusers')
15 controller = models.ForeignKey(Controller,related_name='controllersusers')
Tony Mack50e12212015-03-09 13:03:56 -040016 kuser_id = StrippedCharField(null=True, blank=True, max_length=200, help_text="Keystone user id")
Tony Mack06c8e472014-11-30 15:53:08 -050017
Tony Mack5d93a9e2015-04-11 12:17:59 -040018
19 class Meta:
20 unique_together = ('user', 'controller')
Tony Mackc8836df2015-03-09 17:13:14 -040021
Tony Mack06c8e472014-11-30 15:53:08 -050022 def __unicode__(self): return u'%s %s' % (self.controller, self.user)
23
24 @staticmethod
25 def select_by_user(user):
26 if user.is_admin:
Tony Mack3066a952015-01-05 22:48:11 -050027 qs = ControllerUser.objects.all()
Tony Mack06c8e472014-11-30 15:53:08 -050028 else:
Scott Baker34d16d42015-10-07 22:50:21 -070029 users = User.select_by_user(user)
Tony Mack3066a952015-01-05 22:48:11 -050030 qs = ControllerUser.objects.filter(user__in=users)
Tony Mack06c8e472014-11-30 15:53:08 -050031 return qs
Tony Mackce4e2c22015-01-06 23:48:02 -050032
Tony Mack3428e6e2015-02-08 21:38:41 -050033 def can_update(self, user):
34 return user.can_update_root()
35
Tony Mackce4e2c22015-01-06 23:48:02 -050036
37class ControllerSitePrivilege(PlCoreBase):
38 objects = ControllerLinkManager()
39 deleted_objects = ControllerLinkDeletionManager()
40
41 controller = models.ForeignKey('Controller', related_name='controllersiteprivileges')
42 site_privilege = models.ForeignKey('SitePrivilege', related_name='controllersiteprivileges')
Tony Mack50e12212015-03-09 13:03:56 -040043 role_id = StrippedCharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone id")
Tony Mackce4e2c22015-01-06 23:48:02 -050044
Tony Mack5d93a9e2015-04-11 12:17:59 -040045 class Meta:
46 unique_together = ('controller', 'site_privilege', 'role_id')
Tony Mackc8836df2015-03-09 17:13:14 -040047
Tony Mackce4e2c22015-01-06 23:48:02 -050048 def __unicode__(self): return u'%s %s' % (self.controller, self.site_privilege)
49
50 def can_update(self, user):
51 if user.is_readonly:
52 return False
53 if user.is_admin:
54 return True
55 cprivs = ControllerSitePrivilege.objects.filter(site_privilege__user=user)
56 for cpriv in dprivs:
57 if cpriv.site_privilege.role.role == ['admin', 'Admin']:
58 return True
59 return False
60
61 @staticmethod
62 def select_by_user(user):
63 if user.is_admin:
64 qs = ControllerSitePrivilege.objects.all()
65 else:
66 cpriv_ids = [cp.id for cp in ControllerSitePrivilege.objects.filter(site_privilege__user=user)]
67 qs = ControllerSitePrivilege.objects.filter(id__in=cpriv_ids)
68 return qs
69
70
71class ControllerSlicePrivilege(PlCoreBase):
72 objects = ControllerLinkManager()
73 deleted_objects = ControllerLinkDeletionManager()
74
75 controller = models.ForeignKey('Controller', related_name='controllersliceprivileges')
76 slice_privilege = models.ForeignKey('SlicePrivilege', related_name='controllersliceprivileges')
Tony Mack50e12212015-03-09 13:03:56 -040077 role_id = StrippedCharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone id")
Tony Mackce4e2c22015-01-06 23:48:02 -050078
Tony Mack5d93a9e2015-04-11 12:17:59 -040079
80 class Meta:
81 unique_together = ('controller', 'slice_privilege')
Tony Mackc8836df2015-03-09 17:13:14 -040082
Tony Mackce4e2c22015-01-06 23:48:02 -050083 def __unicode__(self): return u'%s %s' % (self.controller, self.slice_privilege)
84
85 def can_update(self, user):
86 if user.is_readonly:
87 return False
88 if user.is_admin:
89 return True
90 cprivs = ControllerSlicePrivilege.objects.filter(slice_privilege__user=user)
91 for cpriv in dprivs:
92 if cpriv.role.role == ['admin', 'Admin']:
93 return True
94 return False
95
96 @staticmethod
97 def select_by_user(user):
98 if user.is_admin:
99 qs = ControllerSlicePrivilege.objects.all()
100 else:
101 cpriv_ids = [cp.id for cp in ControllerSlicePrivilege.objects.filter(slice_privilege__user=user)]
102 qs = ControllerSlicePrivilege.objects.filter(id__in=cpriv_ids)
103 return qs
104