From 791003995ca205e63305a99c3e82198312457ced Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Mon, 1 Apr 2013 19:43:14 -0400 Subject: [PATCH] List the projects that a user can see. --- lib/main/tests/projects.py | 43 +++++++------------------------------- lib/main/views.py | 16 ++++++++++++++ lib/urls.py | 2 ++ 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/lib/main/tests/projects.py b/lib/main/tests/projects.py index d9f1165ebb..1641115f32 100644 --- a/lib/main/tests/projects.py +++ b/lib/main/tests/projects.py @@ -269,43 +269,14 @@ class ProjectsTest(BaseTest): # from a user, can see what projects they can see based on team association # though this resource doesn't do anything else - raise Exception("STOP") + got = self.get(url, expect=200, auth=self.get_other_credentials()) + self.assertEquals(got['count'], 5) + got = self.get(url, expect=403, auth=self.get_nobody_credentials()) + got = self.get(url, expect=401, auth=self.get_invalid_credentials()) + got = self.get(url, expect=401) + got = self.get(url, expect=200, auth=self.get_super_credentials()) + - # ===================================================================== - # CREDENTIALS - - credentials = '/api/v1/credentials/' - team_creds = '/api/v1/teams/1/credentials/' - user_creds = '/api/v1/users/1/credentials/' - - # can add credentials for a team - - # can add credentials for a user - - # can list credentials belonging to a user - - # can list credentials belonging to a team - - # can access all credentials for a user (team+project) in one view - - # ====================================================================== - # PERMISSIONS - - permissions = '/api/v1/permissions/' - user_permissions = '/api/v1/users/1/permissions/' - team_permissions = '/api/v1/teams/1/permissions/' - - # can add permissions to a user - - # can add permissions to a team - - # can list permissions - - # can list permissions that match a user - - # can list permissions that match a project - - # can remove permissions diff --git a/lib/main/views.py b/lib/main/views.py index e7b635ee42..64c7d34709 100644 --- a/lib/main/views.py +++ b/lib/main/views.py @@ -319,6 +319,22 @@ class UsersTeamsList(BaseSubList): raise PermissionDenied() return Team.objects.filter(users__in = [ user ]) +class UsersProjectsList(BaseSubList): + + model = Project + serializer_class = ProjectSerializer + permission_classes = (CustomRbac,) + parent_model = User + relationship = 'teams' + postable = False + + def _get_queryset(self): + user = User.objects.get(pk=self.kwargs['pk']) + if not UserHelper.can_user_administrate(self.request.user, user): + raise PermissionDenied() + teams = user.teams.all() + return Project.objects.filter(teams__in = teams) + class UsersOrganizationsList(BaseSubList): model = Organization diff --git a/lib/urls.py b/lib/urls.py index a8d067601d..f8c57bb09f 100644 --- a/lib/urls.py +++ b/lib/urls.py @@ -36,6 +36,7 @@ views_UsersMeList = views.UsersMeList.as_view() views_UsersTeamsList = views.UsersTeamsList.as_view() views_UsersOrganizationsList = views.UsersOrganizationsList.as_view() views_UsersAdminOrganizationsList = views.UsersAdminOrganizationsList.as_view() +views_UsersProjectsList = views.UsersProjectsList.as_view() # projects service views_ProjectsList = views.ProjectsList.as_view() @@ -98,6 +99,7 @@ urlpatterns = patterns('', url(r'^api/v1/users/(?P[0-9]+)/teams/$', views_UsersTeamsList), url(r'^api/v1/users/(?P[0-9]+)/organizations/$', views_UsersOrganizationsList), url(r'^api/v1/users/(?P[0-9]+)/admin_of_organizations/$', views_UsersAdminOrganizationsList), + url(r'^api/v1/users/(?P[0-9]+)/projects/$', views_UsersProjectsList), # projects service url(r'^api/v1/projects/$', views_ProjectsList),