2013-03-20 06:26:35 +04:00
from django . http import HttpResponse
from django . views . decorators . csrf import csrf_exempt
from lib . main . models import *
2013-03-22 19:35:26 +04:00
from django . contrib . auth . models import User
2013-03-20 06:26:35 +04:00
from lib . main . serializers import *
2013-03-21 08:34:59 +04:00
from lib . main . rbac import *
2013-03-21 22:20:59 +04:00
from django . core . exceptions import PermissionDenied
2013-03-20 06:26:35 +04:00
from rest_framework import mixins
from rest_framework import generics
from rest_framework import permissions
2013-03-22 17:50:42 +04:00
from rest_framework . response import Response
from rest_framework import status
2013-03-21 18:25:49 +04:00
import exceptions
2013-03-21 22:20:59 +04:00
import datetime
2013-03-23 00:52:44 +04:00
from base_views import BaseList , BaseDetail , BaseSubList
2013-03-21 22:20:59 +04:00
class OrganizationsList ( BaseList ) :
2013-03-20 06:26:35 +04:00
model = Organization
serializer_class = OrganizationSerializer
permission_classes = ( CustomRbac , )
2013-03-21 23:43:35 +04:00
# I can see the organizations if:
# I am a superuser
# I am an admin of the organization
# I am a member of the organization
2013-03-21 07:14:09 +04:00
2013-03-21 22:20:59 +04:00
def _get_queryset ( self ) :
2013-03-21 07:14:09 +04:00
if self . request . user . is_superuser :
2013-03-21 23:43:35 +04:00
return Organization . objects . all ( )
2013-03-21 22:20:59 +04:00
return Organization . objects . filter (
2013-03-22 19:35:26 +04:00
admins__in = [ self . request . user ]
2013-03-21 22:20:59 +04:00
) . distinct ( ) | Organization . objects . filter (
2013-03-22 19:35:26 +04:00
users__in = [ self . request . user ]
2013-03-21 22:20:59 +04:00
) . distinct ( )
class OrganizationsDetail ( BaseDetail ) :
2013-03-21 18:25:49 +04:00
2013-03-20 06:26:35 +04:00
model = Organization
serializer_class = OrganizationSerializer
permission_classes = ( CustomRbac , )
2013-03-21 23:11:47 +04:00
class OrganizationsAuditTrailList ( BaseList ) :
2013-03-21 23:43:35 +04:00
model = AuditTrail
serializer_class = AuditTrailSerializer
permission_classes = ( CustomRbac , )
2013-03-21 23:11:47 +04:00
class OrganizationsUsersList ( BaseList ) :
2013-03-21 23:43:35 +04:00
model = User
serializer_class = UserSerializer
permission_classes = ( CustomRbac , )
# I can see the users in the organization if:
# I am a super user
# I am an admin of the organization
def _get_queryset ( self ) :
# FIXME:
2013-03-22 19:35:26 +04:00
base = User . objects . all ( organizations__pk__in = [ self . kwargs . get ( ' pk ' ) ] )
2013-03-21 23:43:35 +04:00
if self . request . user . is_superuser :
return base . all ( )
return base . objects . filter (
2013-03-22 19:35:26 +04:00
organizations__organization__admins__in = [ self . request . user ]
2013-03-21 23:43:35 +04:00
) . distinct ( )
2013-03-21 23:11:47 +04:00
class OrganizationsAdminsList ( BaseList ) :
2013-03-21 23:43:35 +04:00
model = User
serializer_class = UserSerializer
permission_classes = ( CustomRbac , )
# I can see the admins in the organization if:
# I am a super user
# I am an admin of the organization
def _get_queryset ( self ) :
# FIXME
2013-03-22 01:38:53 +04:00
base = User . objects . all ( admin_of_organizations__pk__in = [ self . kwargs . get ( ' pk ' ) ] )
2013-03-21 23:43:35 +04:00
if self . request . user . is_superuser :
return base . all ( )
return base . filter (
2013-03-22 19:35:26 +04:00
organizations__organization__admins__in = [ self . request . user ]
2013-03-21 23:43:35 +04:00
) . distinct ( )
2013-03-21 23:11:47 +04:00
2013-03-23 00:52:44 +04:00
class OrganizationsProjectsList ( BaseSubList ) :
2013-03-21 23:43:35 +04:00
2013-03-22 01:38:53 +04:00
model = Project
serializer_class = ProjectSerializer
permission_classes = ( CustomRbac , )
2013-03-23 02:16:40 +04:00
parent_model = Organization # for sub list
relationship = ' projects ' # " "
2013-03-22 01:38:53 +04:00
2013-03-21 23:43:35 +04:00
# I can see the projects from the organization if:
# I'm the superuser
# I am a an administrator of the organization
2013-03-22 01:38:53 +04:00
# I am a member of a team on the project
2013-03-21 23:43:35 +04:00
def _get_queryset ( self ) :
2013-03-22 01:38:53 +04:00
base = Project . objects . filter ( organizations__in = [ self . kwargs . get ( ' pk ' ) ] )
2013-03-21 23:43:35 +04:00
if self . request . user . is_superuser :
return base . all ( )
return base . filter (
2013-03-22 19:35:26 +04:00
organizations__admins__in = [ self . request . user ]
2013-03-21 23:43:35 +04:00
) . distinct ( ) | base . filter (
2013-03-22 19:35:26 +04:00
teams__users__in = [ self . request . user ]
2013-03-21 23:43:35 +04:00
) . distinct ( )
2013-03-21 23:11:47 +04:00
class OrganizationsTagsList ( BaseList ) :
2013-03-21 23:43:35 +04:00
# FIXME: guts & tests
2013-03-21 23:11:47 +04:00
pass
2013-03-22 01:38:53 +04:00
class ProjectsDetail ( BaseDetail ) :
model = Project
serializer_class = ProjectSerializer
permission_classes = ( CustomRbac , )
2013-03-21 23:11:47 +04:00