Merge pull request #1754 from coreos-inc/team-add-perms
Better UI and permissions handling for robots and teams
This commit is contained in:
commit
cd8b45e25b
21 changed files with 895 additions and 458 deletions
|
@ -5,6 +5,17 @@ from data.database import (RepositoryPermission, User, Repository, Visibility, R
|
|||
from data.model import DataModelException, _basequery
|
||||
|
||||
|
||||
def list_team_permissions(team):
|
||||
return (RepositoryPermission
|
||||
.select(RepositoryPermission)
|
||||
.join(Repository)
|
||||
.join(Visibility)
|
||||
.switch(RepositoryPermission)
|
||||
.join(Role)
|
||||
.switch(RepositoryPermission)
|
||||
.where(RepositoryPermission.team == team))
|
||||
|
||||
|
||||
def list_robot_permissions(robot_name):
|
||||
return (RepositoryPermission
|
||||
.select(RepositoryPermission, User, Repository)
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from data.database import Team, TeamMember, TeamRole, User, TeamMemberInvite
|
||||
from data.database import Team, TeamMember, TeamRole, User, TeamMemberInvite, RepositoryPermission
|
||||
from data.model import (DataModelException, InvalidTeamException, UserAlreadyInTeam,
|
||||
InvalidTeamMemberException, user, _basequery)
|
||||
from util.validation import validate_username
|
||||
from peewee import fn, JOIN_LEFT_OUTER
|
||||
from util.morecollections import AttrDict
|
||||
|
||||
|
||||
def create_team(name, org_obj, team_role_name, description=''):
|
||||
|
@ -186,7 +188,50 @@ def get_matching_teams(team_prefix, organization):
|
|||
|
||||
|
||||
def get_teams_within_org(organization):
|
||||
return Team.select().where(Team.organization == organization)
|
||||
""" Returns a AttrDict of team info (id, name, description), its role under the org,
|
||||
the number of repositories on which it has permission, and the number of members.
|
||||
"""
|
||||
query = (Team.select()
|
||||
.where(Team.organization == organization)
|
||||
.join(TeamRole))
|
||||
|
||||
def _team_view(team):
|
||||
return {
|
||||
'id': team.id,
|
||||
'name': team.name,
|
||||
'description': team.description,
|
||||
'role_name': team.role.name,
|
||||
|
||||
'repo_count': 0,
|
||||
'member_count': 0,
|
||||
}
|
||||
|
||||
teams = {team.id: _team_view(team) for team in query}
|
||||
if not teams:
|
||||
# Just in case. Should ideally never happen.
|
||||
return []
|
||||
|
||||
# Add repository permissions count.
|
||||
permission_tuples = (RepositoryPermission.select(RepositoryPermission.team,
|
||||
fn.Count(RepositoryPermission.id))
|
||||
.where(RepositoryPermission.team << teams.keys())
|
||||
.group_by(RepositoryPermission.team)
|
||||
.tuples())
|
||||
|
||||
for perm_tuple in permission_tuples:
|
||||
teams[perm_tuple[0]]['repo_count'] = perm_tuple[1]
|
||||
|
||||
# Add the member count.
|
||||
members_tuples = (TeamMember.select(TeamMember.team,
|
||||
fn.Count(TeamMember.id))
|
||||
.where(TeamMember.team << teams.keys())
|
||||
.group_by(TeamMember.team)
|
||||
.tuples())
|
||||
|
||||
for member_tuple in members_tuples:
|
||||
teams[member_tuple[0]]['member_count'] = member_tuple[1]
|
||||
|
||||
return [AttrDict(team_info) for team_info in teams.values()]
|
||||
|
||||
|
||||
def get_user_teams_within_org(username, organization):
|
||||
|
|
Reference in a new issue