fix: add elevation check to role edit route
This commit is contained in:
@@ -36,10 +36,12 @@ pub async fn req(
|
|||||||
.throw_permission(db, Permission::ManagePermissions)
|
.throw_permission(db, Permission::ManagePermissions)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
// Prevent us from editing roles above us
|
||||||
if rank <= permissions.get_member_rank().unwrap_or(i64::MIN) {
|
if rank <= permissions.get_member_rank().unwrap_or(i64::MIN) {
|
||||||
return Err(Error::NotElevated);
|
return Err(Error::NotElevated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure we have access to grant these permissions forwards
|
||||||
let current_value: Override = current_value.into();
|
let current_value: Override = current_value.into();
|
||||||
permissions
|
permissions
|
||||||
.throw_permission_override(db, current_value, data.permissions)
|
.throw_permission_override(db, current_value, data.permissions)
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ pub async fn req(
|
|||||||
.throw_permission(db, Permission::ManagePermissions)
|
.throw_permission(db, Permission::ManagePermissions)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
// Ensure we have permissions to grant these permissions forwards
|
||||||
permissions
|
permissions
|
||||||
.throw_permission_value(db, data.permissions)
|
.throw_permission_value(db, data.permissions)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
@@ -58,6 +58,11 @@ pub async fn req(
|
|||||||
let member_rank = permissions.get_member_rank().unwrap_or(i64::MIN);
|
let member_rank = permissions.get_member_rank().unwrap_or(i64::MIN);
|
||||||
|
|
||||||
if let Some(mut role) = server.roles.remove(&role_id) {
|
if let Some(mut role) = server.roles.remove(&role_id) {
|
||||||
|
// Prevent us from editing roles above us
|
||||||
|
if role.rank <= member_rank {
|
||||||
|
return Err(Error::NotElevated);
|
||||||
|
}
|
||||||
|
|
||||||
let DataEditRole {
|
let DataEditRole {
|
||||||
name,
|
name,
|
||||||
colour,
|
colour,
|
||||||
@@ -66,6 +71,7 @@ pub async fn req(
|
|||||||
remove,
|
remove,
|
||||||
} = data;
|
} = data;
|
||||||
|
|
||||||
|
// Prevent us from moving a role above other roles
|
||||||
if let Some(rank) = &rank {
|
if let Some(rank) = &rank {
|
||||||
if rank <= &member_rank {
|
if rank <= &member_rank {
|
||||||
return Err(Error::NotElevated);
|
return Err(Error::NotElevated);
|
||||||
|
|||||||
Reference in New Issue
Block a user