Change permissions to only load required by default
Permissions now load just the namespace and/or repository permissions requested, with a fallback to a full permissions load if necessary.
This commit is contained in:
parent
685dd1a925
commit
a3aa4592cf
3 changed files with 167 additions and 70 deletions
|
@ -33,7 +33,7 @@ def list_organization_member_permissions(organization, limit_to_user=None):
|
|||
return query
|
||||
|
||||
|
||||
def get_all_user_permissions(user):
|
||||
def get_all_user_repository_permissions(user):
|
||||
return _get_user_repo_permissions(user)
|
||||
|
||||
|
||||
|
@ -41,7 +41,12 @@ def get_user_repo_permissions(user, repo):
|
|||
return _get_user_repo_permissions(user, limit_to_repository_obj=repo)
|
||||
|
||||
|
||||
def _get_user_repo_permissions(user, limit_to_repository_obj=None):
|
||||
def get_user_repository_permissions(user, namespace, repo_name):
|
||||
return _get_user_repo_permissions(user, limit_namespace=namespace, limit_repo_name=repo_name)
|
||||
|
||||
|
||||
def _get_user_repo_permissions(user, limit_to_repository_obj=None, limit_namespace=None,
|
||||
limit_repo_name=None):
|
||||
UserThroughTeam = User.alias()
|
||||
|
||||
base_query = (RepositoryPermission
|
||||
|
@ -54,6 +59,9 @@ def _get_user_repo_permissions(user, limit_to_repository_obj=None):
|
|||
|
||||
if limit_to_repository_obj is not None:
|
||||
base_query = base_query.where(RepositoryPermission.repository == limit_to_repository_obj)
|
||||
elif limit_namespace and limit_repo_name:
|
||||
base_query = base_query.where(Repository.name == limit_repo_name,
|
||||
Namespace.username == limit_namespace)
|
||||
|
||||
direct = (base_query
|
||||
.clone()
|
||||
|
@ -121,12 +129,16 @@ def add_prototype_permission(org, role_name, activating_user,
|
|||
delegate_user=delegate_user, delegate_team=delegate_team)
|
||||
|
||||
|
||||
def get_org_wide_permissions(user):
|
||||
def get_org_wide_permissions(user, org_filter=None):
|
||||
Org = User.alias()
|
||||
team_with_role = Team.select(Team, Org, TeamRole).join(TeamRole)
|
||||
with_org = team_with_role.switch(Team).join(Org, on=(Team.organization ==
|
||||
Org.id))
|
||||
with_user = with_org.switch(Team).join(TeamMember).join(User)
|
||||
|
||||
if org_filter:
|
||||
with_user.where(Org.username == org_filter)
|
||||
|
||||
return with_user.where(User.id == user, Org.organization == True)
|
||||
|
||||
|
||||
|
|
Reference in a new issue