]> Untitled Git - lemmy.git/commitdiff
Allow admins to add mods and transfer communities
authorDessalines <tyhou13@gmx.com>
Thu, 29 Aug 2019 22:18:50 +0000 (15:18 -0700)
committerDessalines <tyhou13@gmx.com>
Thu, 29 Aug 2019 22:18:50 +0000 (15:18 -0700)
- Fixes #238

server/src/api/community.rs
ui/src/components/comment-node.tsx

index 37bc20dbf6b836fadf588823ae0958eae45c2163..a278aa14dec90607da497c287db923c6e3608576 100644 (file)
@@ -605,8 +605,15 @@ impl Perform<GetCommunityResponse> for Oper<TransferCommunity> {
 
     let read_community = Community::read(&conn, data.community_id)?;
 
-    // Make sure user is the creator
-    if read_community.creator_id != user_id {
+    let site_creator_id = Site::read(&conn, 1)?.creator_id;
+    let mut admins = UserView::admins(&conn)?;
+    let creator_index = admins.iter().position(|r| r.id == site_creator_id).unwrap();
+    let creator_user = admins.remove(creator_index);
+    admins.insert(0, creator_user);
+
+
+    // Make sure user is the creator, or an admin
+    if user_id != read_community.creator_id && !admins.iter().map(|a| a.id).collect::<Vec<i32>>().contains(&user_id) {
       return Err(APIError::err(&self.op, "not_an_admin"))?
     }
     
@@ -675,11 +682,6 @@ impl Perform<GetCommunityResponse> for Oper<TransferCommunity> {
       }
     };
 
-    let site_creator_id = Site::read(&conn, 1)?.creator_id;
-    let mut admins = UserView::admins(&conn)?;
-    let creator_index = admins.iter().position(|r| r.id == site_creator_id).unwrap();
-    let creator_user = admins.remove(creator_index);
-    admins.insert(0, creator_user);
 
     // Return the jwt
     Ok(
index f26275c8db1cdb9daa12d14a757ce2ae7dc45962..8779f1f9d96de95a725370a37665de592fc0bfd9 100644 (file)
@@ -152,8 +152,8 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
                         }
                       </>
                     }
-                    {/* Community creators can transfer community to another mod */}
-                    {this.amCommunityCreator && this.isMod &&
+                    {/* Community creators and admins can transfer community to another mod */}
+                    {(this.amCommunityCreator || this.canAdmin) && this.isMod &&
                       <li className="list-inline-item">
                         {!this.state.showConfirmTransferCommunity ?
                         <span class="pointer" onClick={linkEvent(this, this.handleShowConfirmTransferCommunity)}><T i18nKey="transfer_community">#</T>
@@ -491,6 +491,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
       user_id: i.props.node.comment.creator_id,
     };
     WebSocketService.Instance.transferCommunity(form);
+    i.state.showConfirmTransferCommunity = false;
     i.setState(i.state);
   }
 
@@ -509,6 +510,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
       user_id: i.props.node.comment.creator_id,
     };
     WebSocketService.Instance.transferSite(form);
+    i.state.showConfirmTransferSite = false;
     i.setState(i.state);
   }