From 21d53497851e367a72e1ac41525820452fae41b8 Mon Sep 17 00:00:00 2001 From: TKilFree Date: Mon, 26 Jun 2023 09:47:39 +0100 Subject: [PATCH] feat: allow all admins to purge content (#3271) --- crates/api/src/site/purge/comment.rs | 6 +++--- crates/api/src/site/purge/community.rs | 6 +++--- crates/api/src/site/purge/person.rs | 6 +++--- crates/api/src/site/purge/post.rs | 6 +++--- crates/api_common/src/utils.rs | 13 ------------- 5 files changed, 12 insertions(+), 25 deletions(-) diff --git a/crates/api/src/site/purge/comment.rs b/crates/api/src/site/purge/comment.rs index c8abf57d9..7beba9c0b 100644 --- a/crates/api/src/site/purge/comment.rs +++ b/crates/api/src/site/purge/comment.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{PurgeComment, PurgeItemResponse}, - utils::{is_top_admin, local_user_view_from_jwt}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -23,8 +23,8 @@ impl Perform for PurgeComment { let data: &Self = self; let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; - // Only let the top admin purge an item - is_top_admin(context.pool(), local_user_view.person.id).await?; + // Only let admin purge an item + is_admin(&local_user_view)?; let comment_id = data.comment_id; diff --git a/crates/api/src/site/purge/community.rs b/crates/api/src/site/purge/community.rs index 111c437ec..50482b73a 100644 --- a/crates/api/src/site/purge/community.rs +++ b/crates/api/src/site/purge/community.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeCommunity, PurgeItemResponse}, - utils::{is_top_admin, local_user_view_from_jwt, purge_image_posts_for_community}, + utils::{is_admin, local_user_view_from_jwt, purge_image_posts_for_community}, }; use lemmy_db_schema::{ source::{ @@ -24,8 +24,8 @@ impl Perform for PurgeCommunity { let data: &Self = self; let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; - // Only let the top admin purge an item - is_top_admin(context.pool(), local_user_view.person.id).await?; + // Only let admin purge an item + is_admin(&local_user_view)?; let community_id = data.community_id; diff --git a/crates/api/src/site/purge/person.rs b/crates/api/src/site/purge/person.rs index 5273110ed..f0cbc7e8d 100644 --- a/crates/api/src/site/purge/person.rs +++ b/crates/api/src/site/purge/person.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeItemResponse, PurgePerson}, - utils::{is_top_admin, local_user_view_from_jwt, purge_image_posts_for_person}, + utils::{is_admin, local_user_view_from_jwt, purge_image_posts_for_person}, }; use lemmy_db_schema::{ source::{ @@ -24,8 +24,8 @@ impl Perform for PurgePerson { let data: &Self = self; let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; - // Only let the top admin purge an item - is_top_admin(context.pool(), local_user_view.person.id).await?; + // Only let admin purge an item + is_admin(&local_user_view)?; // Read the person to get their images let person_id = data.person_id; diff --git a/crates/api/src/site/purge/post.rs b/crates/api/src/site/purge/post.rs index 01d0332eb..65d390f8e 100644 --- a/crates/api/src/site/purge/post.rs +++ b/crates/api/src/site/purge/post.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeItemResponse, PurgePost}, - utils::{is_top_admin, local_user_view_from_jwt}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -24,8 +24,8 @@ impl Perform for PurgePost { let data: &Self = self; let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; - // Only let the top admin purge an item - is_top_admin(context.pool(), local_user_view.person.id).await?; + // Only let admin purge an item + is_admin(&local_user_view)?; let post_id = data.post_id; diff --git a/crates/api_common/src/utils.rs b/crates/api_common/src/utils.rs index 455acc182..4781ce923 100644 --- a/crates/api_common/src/utils.rs +++ b/crates/api_common/src/utils.rs @@ -32,7 +32,6 @@ use lemmy_db_views_actor::structs::{ CommunityModeratorView, CommunityPersonBanView, CommunityView, - PersonView, }; use lemmy_utils::{ claims::Claims, @@ -79,18 +78,6 @@ pub async fn is_mod_or_admin_opt( } } -pub async fn is_top_admin(pool: &DbPool, person_id: PersonId) -> Result<(), LemmyError> { - let admins = PersonView::admins(pool).await?; - let top_admin = admins - .first() - .ok_or_else(|| LemmyError::from_message("no admins"))?; - - if top_admin.person.id != person_id { - return Err(LemmyError::from_message("not_top_admin")); - } - Ok(()) -} - pub fn is_admin(local_user_view: &LocalUserView) -> Result<(), LemmyError> { if !local_user_view.person.admin { return Err(LemmyError::from_message("not_an_admin"));