コントローラでのアクセス制御

管理画面ではすべてアクセス制御の対象になります。ビューでもアクセス制御を使って不要なリンクを出さないようにしますが,コントローラでも調べる必要があります。例えばURLを直接叩かれたときなどに対応するためです。

コントローラでアクションを処理するところの先頭に,そのメソッドの呼び出しを置きます。
  def new
    check_blog_right :commit
    @item = Item.new

    unless performed?
      respond_to do |format|
        format.html # new.html.erb
        format.xml  { render :xml => @item }
      end
    end
  end

ここでは最初のcheck_blog_rightのメソッド呼び出しである。実装はこう。
  def check_blog_right right
    right = right.to_s
    unless @member.has_right right, @blog
      @errormessage = '403 error'
      render :template=>'admin/admin/error.html.erb', :status => 403
    end
  end

権限がなかった場合はその場でエラー画面を出力する。

このとき,そのままプログラムの実行を続けると本来(権限があったときのページ)を出力しようとして,既に出力が終わっているために「DoubleRenderError」が発生します。それを防ぐため,コントローラの「performed?」メソッドを使って,先に出力がある場合は,出力しないようにします


11 Jul, 2008 | Foodyn ( つぶやき , 作業メモ ) | | Andy
« Prev item - Next Item »
---------------------------------------------

Comments


No comments yet. You can be the first!


Leave comment

© 2007 yoursite.com | Designed by DesignsByDarren
Ported to Nucleus CMS: Suvoroff