in django_airavata/apps/api/views.py [0:0]
def all(self, request, entity_id=None):
"""Load direct plus indirectly (inherited) shared permissions."""
users = {}
# Load accessible users in order of permission precedence: users that
# have WRITE permission should also have READ
users.update(self._load_accessible_users(
entity_id, ResourcePermissionType.READ))
users.update(self._load_accessible_users(
entity_id, ResourcePermissionType.WRITE))
users.update(self._load_accessible_users(
entity_id, ResourcePermissionType.MANAGE_SHARING))
owner_ids = self._load_accessible_users(
entity_id, ResourcePermissionType.OWNER)
# Assume that there is one and only one DIRECT owner (there may be one
# or more INDIRECT cascading owners, which would the owners of the
# ancestor entities, but getAllAccessibleUsers does not return
# indirectly cascading owners)
owner_id = list(owner_ids.keys())[0]
# Remove owner from the users list
del users[owner_id]
user_list = []
for user_id in users:
user_list.append({'user': self._load_user_profile(user_id),
'permissionType': users[user_id]})
groups = {}
groups.update(self._load_accessible_groups(
entity_id, ResourcePermissionType.READ))
groups.update(self._load_accessible_groups(
entity_id, ResourcePermissionType.WRITE))
groups.update(self._load_accessible_groups(
entity_id, ResourcePermissionType.MANAGE_SHARING))
group_list = []
for group_id in groups:
group_list.append({'group': self._load_group(group_id),
'permissionType': groups[group_id]})
shared_entity = {'entityId': entity_id,
'userPermissions': user_list,
'groupPermissions': group_list,
'owner': self._load_user_profile(owner_id)}
serializer = self.serializer_class(
shared_entity, context={'request': request})
return Response(serializer.data)