snippets_controller.rb 1.7 KB
Newer Older
1
class SnippetsController < ProjectResourceController
2
  before_filter :snippet, only: [:show, :edit, :destroy, :update, :raw]
D
Dmitriy Zaporozhets 已提交
3 4

  # Allow read any snippet
G
gitlabhq 已提交
5
  before_filter :authorize_read_snippet!
D
Dmitriy Zaporozhets 已提交
6 7

  # Allow write(create) snippet
8
  before_filter :authorize_write_snippet!, only: [:new, :create]
D
Dmitriy Zaporozhets 已提交
9 10

  # Allow modify snippet
11
  before_filter :authorize_modify_snippet!, only: [:edit, :update]
D
Dmitriy Zaporozhets 已提交
12 13

  # Allow destroy snippet
14
  before_filter :authorize_admin_snippet!, only: [:destroy]
G
gitlabhq 已提交
15 16 17 18 19 20 21

  respond_to :html

  def index
    @snippets = @project.snippets
  end

N
Nihad Abbasov 已提交
22
  def new
G
gitlabhq 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
    @snippet = @project.snippets.new
  end

  def create
    @snippet = @project.snippets.new(params[:snippet])
    @snippet.author = current_user
    @snippet.save

    if @snippet.valid?
      redirect_to [@project, @snippet]
    else
      respond_with(@snippet)
    end
  end

  def edit
  end

  def update
    @snippet.update_attributes(params[:snippet])

    if @snippet.valid?
      redirect_to [@project, @snippet]
    else
      respond_with(@snippet)
    end
  end

  def show
52
    @note = @project.notes.new(noteable: @snippet)
G
gitlabhq 已提交
53 54 55
  end

  def destroy
G
gitlabhq 已提交
56
    return access_denied! unless can?(current_user, :admin_snippet, @snippet)
G
gitlabhq 已提交
57 58 59

    @snippet.destroy

G
gitlabhq 已提交
60
    redirect_to project_snippets_path(@project)
G
gitlabhq 已提交
61
  end
D
Dmitriy Zaporozhets 已提交
62

R
randx 已提交
63 64 65
  def raw 
    send_data(
      @snippet.content,
66 67 68
      type: "text/plain",
      disposition: 'inline',
      filename: @snippet.file_name
R
randx 已提交
69 70 71
    )
  end

D
Dmitriy Zaporozhets 已提交
72
  protected
R
randx 已提交
73

74 75 76
  def snippet
    @snippet ||= @project.snippets.find(params[:id])
  end
D
Dmitriy Zaporozhets 已提交
77 78

  def authorize_modify_snippet!
79
    return render_404 unless can?(current_user, :modify_snippet, @snippet)
D
Dmitriy Zaporozhets 已提交
80 81 82
  end

  def authorize_admin_snippet!
83
    return render_404 unless can?(current_user, :admin_snippet, @snippet)
D
Dmitriy Zaporozhets 已提交
84
  end
G
gitlabhq 已提交
85
end