権限チェック処理を外出し
先日、Actionからヘルパメソッドを呼ぶというのをやってみようとしたが、要は権限チェックのメソッドを使いたかったのでした。権限チェック処理はActionでもViewでも使うので、共通のモジュールとして切り出して、ApplicationControllerとApplicationHelperでincludeするように修正。
/controllers/app_authentication.rb
module AppAuthentication #管理者ならtrueを返す def admin? current_user.admin #この記法は認証プラグインのもの end ・・・・
/contorllers/application.rb
class ApplicationController < ActionController::Base # restful_authentication(認証用)で追加 include AuthenticatedSystem include AppAuthentication # <------------------★ ・・・・
Action内での権限チェック処理
/controller/comment_controller.rb
def edit ActiveRecord::Base.transaction do comment = Comment.find(params[:comment][:id]) # 権限チェック raise unless comment_editable?(comment) # <------------------★ # 更新実施 comment.update_attributes!(params[:comment]) ・・・・
View側での使用
/helpers/application_helper.rb
module ApplicationHelper # 権限チェックのモジュールをincludeする include AppAuthentication # <------------------★ ・・・・
/views/topic/show.html.erb
<% @comments.each do |c| %> <div id="comment_area_<%=c.id%>"> <%= h(c.user.name) %> <pre><%= h(c.body) %></pre> </div> <% if comment_editable?(c) %> # <------------------★ <%= button_to_function("編集", "comment_area_change(#{c.id}, true)") %> <%= button_to '削除', {:controller => 'comment', :action => 'delete', :id => c.id, :topic_id => @topic.id}, :confirm => 'コメントを削除してよろしいですか?' %> <% end %> ・・・・