Can edit deleted posts.

This commit is contained in:
Robin Ward 2013-02-08 17:49:15 -05:00
parent 25e9cfe3b8
commit 7c11c3fe0f
2 changed files with 42 additions and 6 deletions

View File

@ -64,7 +64,7 @@ class PostsController < ApplicationController
end
def show
@post = Post.where(id: params[:id]).first
@post = find_post_from_params
guardian.ensure_can_see!(@post)
@post.revert_to(params[:version].to_i) if params[:version].present?
@ -74,14 +74,14 @@ class PostsController < ApplicationController
end
def destroy
post = Post.where(id: params[:id]).first
post = find_post_from_params
guardian.ensure_can_delete!(post)
post.delete_by(current_user)
render nothing: true
end
def recover
post = Post.with_deleted.where(id: params[:post_id]).first
post = find_post_from_params
guardian.ensure_can_recover_post!(post)
post.recover
render nothing: true
@ -108,7 +108,7 @@ class PostsController < ApplicationController
# Retrieves a list of versions and who made them for a post
def versions
post = Post.where(id: params[:post_id]).first
post = find_post_from_params
guardian.ensure_can_see!(post)
render_serialized(post.all_versions, VersionSerializer)
@ -116,14 +116,14 @@ class PostsController < ApplicationController
# Direct replies to this post
def replies
post = Post.where(id: params[:post_id]).first
post = find_post_from_params
guardian.ensure_can_see!(post)
render_serialized(post.replies, PostSerializer)
end
def bookmark
post = Post.where(id: params[:post_id]).first
post = find_post_from_params
guardian.ensure_can_see!(post)
if current_user
if params[:bookmarked] == "true"
@ -135,4 +135,15 @@ class PostsController < ApplicationController
render :nothing => true
end
protected
def find_post_from_params
finder = Post.where(id: params[:id] || params[:post_id])
# Include deleted posts if the user is a moderator
finder = finder.with_deleted if current_user.try(:has_trust_level?, :moderator)
finder.first
end
end

View File

@ -18,6 +18,31 @@ describe PostsController do
response.should be_success
end
context "deleted post" do
before do
post.destroy
end
it "can't find deleted posts as an anonymous user" do
xhr :get, :show, id: post.id
response.should be_forbidden
end
it "can't find deleted posts as a regular user" do
log_in(:user)
xhr :get, :show, id: post.id
response.should be_forbidden
end
it "can find posts as a moderator" do
log_in(:moderator)
xhr :get, :show, id: post.id
response.should be_success
end
end
end
describe 'versions' do