in components/user_management/src/routes/user_group.py [0:0]
def update_permissions_of_user_group(
uuid: str, application_uuid: str,
input_application_permissions: UpdateUserGroupPermissions):
"""Assign/unassign permissions related to an application
of user group with the uuid passed in the request body
### Args:
input_application_permissions (UpdateUserGroupPermissions): Dict
containing updated permissions of the application
### Raises:
ResourceNotFoundException: If the user group does not exist
Exception: 500 Internal Server Error if something went wrong
### Returns:
UpdatePermissionsOfGroupResponseModel: UserGroup Object
"""
try:
existing_group = UserGroup.find_by_uuid(uuid)
input_dict = {**input_application_permissions.dict()}
input_permissions = input_dict.get("permission_ids")
group_fields = existing_group.get_fields(reformat_datetime=True)
group_permissions = group_fields.get("permissions") if group_fields.get(
"permissions") else []
group_applications = group_fields.get("applications") if group_fields.get(
"applications") else []
if not application_uuid in group_applications:
raise ValidationError(
"UserGroup doesn't have access to the given application")
CollectionHandler.get_document_from_collection("applications",
application_uuid)
added_permissions = list(set(input_permissions) - set(group_permissions))
permissions_to_add = []
if len(added_permissions) > 0:
for permission in added_permissions:
permissions_to_add.append(
validate_permission_with_application(permission, application_uuid))
for permission in permissions_to_add:
update_permissions_with_user_group(permission, uuid, "add")
group_permissions += added_permissions
removed_permissions = list(set(group_permissions) - set(input_permissions))
removed_permissions_of_application = []
permissions_to_remove = []
if len(removed_permissions) > 0:
for permission in removed_permissions:
permission = validate_permission_with_application(
permission, application_uuid, False)
if permission:
permissions_to_remove.append(permission)
for permission in permissions_to_remove:
update_permissions_with_user_group(permission, uuid, "remove")
removed_permissions_of_application.append(permission.uuid)
group_permissions = list(
set(group_permissions) - set(removed_permissions_of_application))
setattr(existing_group, "permissions", group_permissions)
existing_group.update()
group_fields = existing_group.get_fields(reformat_datetime=True)
return {
"success": True,
"message": "Successfully updated permissions for " +
"the applcation of a user group",
"data": group_fields
}
except ResourceNotFoundException as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise ResourceNotFound(str(e)) from e
except ValidationError as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise BadRequest(str(e)) from e
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise InternalServerError(str(e)) from e