mirror of
https://github.com/discourse/discourse.git
synced 2025-06-01 02:04:53 +08:00
add a way to delete posts and topics when deleting a user with UserDestroyer
This commit is contained in:
@ -150,8 +150,8 @@ class Guardian
|
||||
user && is_staff?
|
||||
end
|
||||
|
||||
def can_delete_user?(user_to_delete)
|
||||
can_administer?(user_to_delete) && user_to_delete.post_count <= 0
|
||||
def can_delete_user?(user)
|
||||
can_administer?(user)
|
||||
end
|
||||
|
||||
# Can we see who acted on a post in a particular way?
|
||||
|
@ -11,10 +11,16 @@ class UserDestroyer
|
||||
|
||||
# Returns false if the user failed to be deleted.
|
||||
# Returns a frozen instance of the User if the delete succeeded.
|
||||
def destroy(user)
|
||||
def destroy(user, opts={})
|
||||
raise Discourse::InvalidParameters.new('user is nil') unless user and user.is_a?(User)
|
||||
raise PostsExistError if user.post_count != 0
|
||||
raise PostsExistError if !opts[:delete_posts] && user.post_count != 0
|
||||
User.transaction do
|
||||
if opts[:delete_posts]
|
||||
user.posts.each do |post|
|
||||
PostDestroyer.new(@admin, post).destroy
|
||||
end
|
||||
raise PostsExistError if user.reload.post_count != 0
|
||||
end
|
||||
user.destroy.tap do |u|
|
||||
if u
|
||||
Post.with_deleted.where(user_id: user.id).update_all("nuked_user = true")
|
||||
|
Reference in New Issue
Block a user