ユーザーが自分のアカウントも表示できるキーホルダーを指名できるアプリがあります。アカウント所有者またはそのキー所有者のみが自分のアカウントを表示できることを意味するよりも before_filter があります。このコードは、ユーザーのホームページを表示しているどちらのユーザーに対しても正常に機能しますが、それ以上のことはできません。現在、キーホルダーとしてログインしているため、ログアウトしたり、どちらのアカウントにも「メモ」を追加したりできません (現時点では)キー所有者は、自分のアカウントとキー所有者である人物に無制限にアクセスできます)。誰でも助けてください。
before_filter は次のとおりです。
def correct_user
@user = User.find(params[:id])
unless (@user && current_user.id == @user.id) || ((current_user.access_id==@user.id)&&(current_user.id==@user.access_id))
redirect_to root_path
end
end
たとえば、メモを作成しようとしたときに発生するエラーは次のとおりです。
ActiveRecord::RecordNotFound in NotesController#new
Couldn't find User without an ID
before_filter の @user 行を参照しています。
キーホルダーでログインしているのに、ホームページは見れるのに何もできないのはどうしてですか?ありがとう!
アップデート:
before_filter を更新 (application_controller.rb 内):
def correct_user
if params[:id]
@user = User.find(params[:id])
unless (@user && current_user.id == @user.id) || ((current_user.access_id==@user.id)&&(current_user.id==@user.access_id))
redirect_to root_path
end
else
redirect_to root_path
end
end
メモ作成時のコンソール出力:
Started POST "/notes" for 127.0.0.1 at 2013-02-28 14:10:49 +0000
Processing by NotesController#create as HTML
Parameters: {"utf8"=>"V", "authenticity_token"=>"qMDHQAoC4l3Be5YZKSH1AJ9E5zS1D
kMNCW2KzUZ38gM=", "note"=>{"user_id"=>"16", "content"=>""}, "commit"=>"Update Note"}
Redirected to http://localhost:3000/
Filter chain halted as :correct_user rendered or redirected
Completed 302 Found in 98ms (ActiveRecord: 0.0ms)
Started GET "/" for 127.0.0.1 at 2013-02-28 14:10:49 +0000
Processing by PublicController#index as HTML
←[1m←[36mUser Load (3.0ms)←[0m ←[1mSELECT "users".* FROM "users" WHERE "users
"."id" = 16 LIMIT 1←[0m
Rendered public/index.html.erb within layouts/application (5.0ms)
←[1m←[36mTimeline Load (3.0ms)←[0m ←[1mSELECT "timelines".* FROM "timelines"
WHERE "timelines"."user_id" = 16 LIMIT 1←[0m
←[1m←[36mMessageBoard Load (2.0ms)←[0m ←[1mSELECT "message_boards".* FROM "me
ssage_boards" WHERE "message_boards"."user_id" = 16 LIMIT 1←[0m
Rendered partials/_menuoptions.html.erb (53.0ms)
Completed 200 OK in 551ms (Views: 535.0ms | ActiveRecord: 16.0ms)