feat: allow all admins to purge content (#3271)
authorTKilFree <tristanfreeman1@gmail.com>
Mon, 26 Jun 2023 08:47:39 +0000 (09:47 +0100)
committerGitHub <noreply@github.com>
Mon, 26 Jun 2023 08:47:39 +0000 (10:47 +0200)
crates/api/src/site/purge/comment.rs
crates/api/src/site/purge/community.rs
crates/api/src/site/purge/person.rs
crates/api/src/site/purge/post.rs
crates/api_common/src/utils.rs

index c8abf57d978a882d6e45d19fdbcf6991aa89b831..7beba9c0b41a97b6fc29c615c1bbfce3e982e39d 100644 (file)
@@ -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;
 
index 111c437ec12957b56f1ab01b9b1cc45f8c176085..50482b73abd055b475de82a9b38f388a077d8625 100644 (file)
@@ -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;
 
index 5273110ed89dcade56cb84a0b8c29abea264d7c0..f0cbc7e8dd8c55f7544d4fda1eb2cee96c75dcc3 100644 (file)
@@ -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;
index 01d0332ebe8b26a463bf68694250ac53d7b14374..65d390f8e0fa91b0ade34f0e72594e5346491d0e 100644 (file)
@@ -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;
 
index 455acc1821085a570f1b2bd47b874d334f9b37ca..4781ce9231032989dd2ff07e113e31c94a16ffdf 100644 (file)
@@ -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"));