diff --git a/data/model.py b/data/model.py index c2ab8bf07..a28f03cf8 100644 --- a/data/model.py +++ b/data/model.py @@ -277,6 +277,12 @@ def get_organization_team_members(teamid): query = joined.where(Team.id == teamid) return query + + +def get_teams_within_org(organization): + return Team.select().where(Team.organization == organization) + + def get_user_teams_within_org(username, organization): joined = Team.select().join(TeamMember).join(User) return joined.where(Team.organization == organization, diff --git a/endpoints/api.py b/endpoints/api.py index d0641fa41..941f33496 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -241,28 +241,33 @@ user_files = UserRequestFiles(app.config['AWS_ACCESS_KEY'], @app.route('/api/organization/', methods=['GET']) def get_organization(orgname): + user = current_user.db_user() + def team_view(t): + view_permission = ViewTeamPermission(orgname, t.name) return { 'id': t.id, - 'name': t.name + 'name': t.name, + 'can_view': view_permission.can() } def org_view(o, teams): + admin_org = AdministerOrganizationPermission(orgname) return { 'name': o.username, 'gravatar': compute_hash(o.email), - 'teams': [team_view(t) for t in teams] + 'teams': [team_view(t) for t in teams], + 'is_admin': admin_org.can() } if current_user.is_anonymous(): abort(404) - user = current_user.db_user() org = model.get_organization(orgname) if not org: abort(404) - teams = model.get_user_teams_within_org(user.username, org) + teams = model.get_teams_within_org(org) return jsonify(org_view(org, teams)) diff --git a/static/js/app.js b/static/js/app.js index c167a33c2..7b607a8a5 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -204,7 +204,6 @@ quayApp = angular.module('quay', ['restangular', 'angularMoment', 'angulartics', when('/organization/:orgname', {templateUrl: '/static/partials/org-view.html', controller: OrgViewCtrl}). when('/organization/:orgname/admin', {templateUrl: '/static/partials/org-admin.html', controller: OrgAdminCtrl}). - when('/organization/:orgname/teams', {templateUrl: '/static/partials/org-teams.html', controller: OrgTeamsCtrl}). when('/organization/:orgname/teams/:teamname', {templateUrl: '/static/partials/team-view.html', controller: TeamViewCtrl}). when('/v1/', {title: 'Activation information', templateUrl: '/static/partials/v1-page.html', controller: V1Ctrl}). diff --git a/static/js/controllers.js b/static/js/controllers.js index f04edb261..6d3ebff7a 100644 --- a/static/js/controllers.js +++ b/static/js/controllers.js @@ -1197,10 +1197,6 @@ function OrgAdminCtrl($scope, Restangular, $routeParams) { var orgname = $routeParams.orgname; } -function OrgTeamsCtrl($scope, Restangular, $routeParams) { - var orgname = $routeParams.orgname; -} - function TeamViewCtrl($rootScope, $scope, Restangular, $routeParams) { $('.info-icon').popover({ 'trigger': 'hover', @@ -1242,6 +1238,8 @@ function TeamViewCtrl($rootScope, $scope, Restangular, $routeParams) { $scope.organization = resp; $scope.loading = !$scope.organization || !$scope.members; }, function() { + $scope.organization = null; + $scope.members = null; $scope.loading = false; }); }; @@ -1254,6 +1252,8 @@ function TeamViewCtrl($rootScope, $scope, Restangular, $routeParams) { $scope.loading = !$scope.organization || !$scope.members; $rootScope.title = teamname + ' (' + orgname + ')'; }, function() { + $scope.organization = null; + $scope.members = null; $scope.loading = false; }); }; diff --git a/static/partials/org-view.html b/static/partials/org-view.html index 83a2b8160..fc373e528 100644 --- a/static/partials/org-view.html +++ b/static/partials/org-view.html @@ -8,4 +8,16 @@
+ +
+ + + + {{ team.name }} + + + + {{ team.name }} + +