From e00603f27665cb3857ba6b249bff99a0cc5a6a3d Mon Sep 17 00:00:00 2001 From: Zomatree Date: Thu, 5 Jun 2025 23:09:27 +0100 Subject: [PATCH] fix: route ranking --- crates/delta/src/routes/servers/roles_edit.rs | 2 +- .../routes/servers/roles_edit_positions.rs | 35 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/crates/delta/src/routes/servers/roles_edit.rs b/crates/delta/src/routes/servers/roles_edit.rs index af4e0cac..78143bf2 100644 --- a/crates/delta/src/routes/servers/roles_edit.rs +++ b/crates/delta/src/routes/servers/roles_edit.rs @@ -12,7 +12,7 @@ use validator::Validate; /// /// Edit a role by its id. #[openapi(tag = "Server Permissions")] -#[patch("//roles/", data = "")] +#[patch("//roles/", data = "", rank = 1)] pub async fn edit( db: &State, user: User, diff --git a/crates/delta/src/routes/servers/roles_edit_positions.rs b/crates/delta/src/routes/servers/roles_edit_positions.rs index 8edc8d7f..e62e7023 100644 --- a/crates/delta/src/routes/servers/roles_edit_positions.rs +++ b/crates/delta/src/routes/servers/roles_edit_positions.rs @@ -8,7 +8,7 @@ use revolt_models::v0; /// /// Edit's server role's ranks. #[openapi(tag = "Server Permissions")] -#[patch("//roles/ranks", data = "", rank = 1)] +#[patch("//roles/ranks", data = "")] pub async fn edit_role_ranks( db: &State, user: User, @@ -31,24 +31,27 @@ pub async fn edit_role_ranks( return Err(create_error!(InvalidOperation)) } - let member_top_rank = query.get_member_rank(); + // dont have to check what the user cant modify if they are the server owner + if server.owner != user.id { + let member_top_rank = query.get_member_rank(); - // find all roles above the member which we should not be able to reorder - let cant_modify = server.roles.clone() - .into_iter() - .filter(|(_, role)| if let Some(top_rank) = member_top_rank { role.rank <= top_rank } else { true }) - .collect::>(); + // find all roles above the member which we should not be able to reorder + let cant_modify = server.roles.clone() + .into_iter() + .filter(|(_, role)| if let Some(top_rank) = member_top_rank { role.rank <= top_rank } else { true }) + .collect::>(); - // check if any roles which we cant reorder have tried to been reordered - if cant_modify.iter() - .any(|(id, _)| { - let existing_rank = existing_order.iter().position(|existing_id| id == existing_id); - let new_rank = new_order.iter().position(|new_id| id == new_id); + // check if any roles which we cant reorder have tried to been reordered + if cant_modify.iter() + .any(|(id, _)| { + let existing_rank = existing_order.iter().position(|existing_id| id == existing_id); + let new_rank = new_order.iter().position(|new_id| id == new_id); - existing_rank != new_rank - }) - { - return Err(create_error!(NotElevated)) + existing_rank != new_rank + }) + { + return Err(create_error!(NotElevated)) + } } // update the roles which have had their rank changed