mirror of
https://github.com/discourse/discourse.git
synced 2025-05-31 14:08:32 +08:00
FEATURE: Allow category group moderators to delete topics (#11069)
* FEATURE - allow category group moderators to delete topics * Allow individual posts to be deleted * DEV - refactor for new `can_moderate_topic?` method
This commit is contained in:
@ -299,7 +299,7 @@ class PostsController < ApplicationController
|
||||
|
||||
def destroy
|
||||
post = find_post_from_params
|
||||
unless current_user.staff?
|
||||
unless guardian.can_moderate_topic?(post.topic)
|
||||
RateLimiter.new(current_user, "delete_post_per_min", SiteSetting.max_post_deletions_per_minute, 1.minute).performed!
|
||||
RateLimiter.new(current_user, "delete_post_per_day", SiteSetting.max_post_deletions_per_day, 1.day).performed!
|
||||
end
|
||||
@ -320,7 +320,7 @@ class PostsController < ApplicationController
|
||||
|
||||
def recover
|
||||
post = find_post_from_params
|
||||
unless current_user.staff?
|
||||
unless guardian.can_moderate_topic?(post.topic)
|
||||
RateLimiter.new(current_user, "delete_post_per_min", SiteSetting.max_post_deletions_per_minute, 1.minute).performed!
|
||||
RateLimiter.new(current_user, "delete_post_per_day", SiteSetting.max_post_deletions_per_day, 1.day).performed!
|
||||
end
|
||||
@ -802,14 +802,21 @@ class PostsController < ApplicationController
|
||||
end
|
||||
|
||||
def find_post_using(finder)
|
||||
# Include deleted posts if the user is staff
|
||||
finder = finder.with_deleted if current_user.try(:staff?)
|
||||
post = finder.first
|
||||
# A deleted post can be seen by staff or a category group moderator for the topic.
|
||||
# But we must find the deleted post to determine which category it belongs to, so
|
||||
# we must find.with_deleted
|
||||
post = finder.with_deleted.first
|
||||
raise Discourse::NotFound unless post
|
||||
|
||||
# load deleted topic
|
||||
post.topic = Topic.with_deleted.find(post.topic_id) if current_user.try(:staff?)
|
||||
raise Discourse::NotFound unless post.topic
|
||||
post.topic = Topic.with_deleted.find(post.topic_id)
|
||||
|
||||
if !post.topic ||
|
||||
(
|
||||
(post.deleted_at.present? || post.topic.deleted_at.present?) &&
|
||||
!guardian.can_moderate_topic?(post.topic)
|
||||
)
|
||||
raise Discourse::NotFound
|
||||
end
|
||||
|
||||
guardian.ensure_can_see!(post)
|
||||
post
|
||||
|
Reference in New Issue
Block a user