blob: 0900df75605f745ceeaeb709263ae34b586b24d2 [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 Mackc8836df2015-03-09 17:13:14 -040018 composite_primary_key = ('user', 'controller', 'kuser_id')
19
Tony Mack06c8e472014-11-30 15:53:08 -050020 def __unicode__(self): return u'%s %s' % (self.controller, self.user)
21
22 @staticmethod
23 def select_by_user(user):
24 if user.is_admin:
Tony Mack3066a952015-01-05 22:48:11 -050025 qs = ControllerUser.objects.all()
Tony Mack06c8e472014-11-30 15:53:08 -050026 else:
27 users = Users.select_by_user(user)
Tony Mack3066a952015-01-05 22:48:11 -050028 qs = ControllerUser.objects.filter(user__in=users)
Tony Mack06c8e472014-11-30 15:53:08 -050029 return qs
Tony Mackce4e2c22015-01-06 23:48:02 -050030
Tony Mack3428e6e2015-02-08 21:38:41 -050031 def can_update(self, user):
32 return user.can_update_root()
33
Tony Mackce4e2c22015-01-06 23:48:02 -050034
35class ControllerSitePrivilege(PlCoreBase):
36 objects = ControllerLinkManager()
37 deleted_objects = ControllerLinkDeletionManager()
38
39 controller = models.ForeignKey('Controller', related_name='controllersiteprivileges')
40 site_privilege = models.ForeignKey('SitePrivilege', related_name='controllersiteprivileges')
Tony Mack50e12212015-03-09 13:03:56 -040041 role_id = StrippedCharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone id")
Tony Mackce4e2c22015-01-06 23:48:02 -050042
Tony Mackc8836df2015-03-09 17:13:14 -040043 composite_primary_key = ('controller', 'site_privilege', 'role_id')
44
Tony Mackce4e2c22015-01-06 23:48:02 -050045 def __unicode__(self): return u'%s %s' % (self.controller, self.site_privilege)
46
47 def can_update(self, user):
48 if user.is_readonly:
49 return False
50 if user.is_admin:
51 return True
52 cprivs = ControllerSitePrivilege.objects.filter(site_privilege__user=user)
53 for cpriv in dprivs:
54 if cpriv.site_privilege.role.role == ['admin', 'Admin']:
55 return True
56 return False
57
58 @staticmethod
59 def select_by_user(user):
60 if user.is_admin:
61 qs = ControllerSitePrivilege.objects.all()
62 else:
63 cpriv_ids = [cp.id for cp in ControllerSitePrivilege.objects.filter(site_privilege__user=user)]
64 qs = ControllerSitePrivilege.objects.filter(id__in=cpriv_ids)
65 return qs
66
67
68class ControllerSlicePrivilege(PlCoreBase):
69 objects = ControllerLinkManager()
70 deleted_objects = ControllerLinkDeletionManager()
71
72 controller = models.ForeignKey('Controller', related_name='controllersliceprivileges')
73 slice_privilege = models.ForeignKey('SlicePrivilege', related_name='controllersliceprivileges')
Tony Mack50e12212015-03-09 13:03:56 -040074 role_id = StrippedCharField(null=True, blank=True, max_length=200, db_index=True, help_text="Keystone id")
Tony Mackce4e2c22015-01-06 23:48:02 -050075
Tony Mackc8836df2015-03-09 17:13:14 -040076 composite_primary_key = ('controller', 'slice_privilege')
77
Tony Mackce4e2c22015-01-06 23:48:02 -050078 def __unicode__(self): return u'%s %s' % (self.controller, self.slice_privilege)
79
80 def can_update(self, user):
81 if user.is_readonly:
82 return False
83 if user.is_admin:
84 return True
85 cprivs = ControllerSlicePrivilege.objects.filter(slice_privilege__user=user)
86 for cpriv in dprivs:
87 if cpriv.role.role == ['admin', 'Admin']:
88 return True
89 return False
90
91 @staticmethod
92 def select_by_user(user):
93 if user.is_admin:
94 qs = ControllerSlicePrivilege.objects.all()
95 else:
96 cpriv_ids = [cp.id for cp in ControllerSlicePrivilege.objects.filter(slice_privilege__user=user)]
97 qs = ControllerSlicePrivilege.objects.filter(id__in=cpriv_ids)
98 return qs
99