Categories
open all | close allTags
テスト | Aptana | 名称 | RESTful | Flash | タグ | Subversion | スキンエンジン | カテゴリ | 国際化 | rake | JustPosted | フォーム | CSRF | パソコン | 認証 | rubygems | ドキュメント | Migration | デュアル・コアSearch
コントローラでのアクセス制御
管理画面ではすべてアクセス制御の対象になります。ビューでもアクセス制御を使って不要なリンクを出さないようにしますが,コントローラでも調べる必要があります。例えば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?」メソッドを使って,先に出力がある場合は,出力しないようにします
Comments
No comments yet. You can be the first!