2011-12-08 7 views
1

私は、deviseによる認証を実装し、CanCanでロール権限を管理しています。私のアプリケーションはレシピを管理しています。レシピを破棄するとセッションが閉じられ、sign_inビューにリダイレクトされます。削除時のDevise + CanCanの奇妙な動作

認証とアクセス許可を確認していない場合は正常に動作します。

これは非常に奇妙で、なぜこのようなことが起こるのかわかりません。助けてください。

おかげ

LOG:

Started POST "/recipes/21" for 127.0.0.1 at Thu Dec 08 19:53:30 +0100 2011 
Processing by RecipesController#destroy as HTML 
Parameters: {"id"=>"21"} 
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1 
Completed 401 Unauthorized in 44ms 

Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at Thu Dec 08 19:53:30 +0100 2011 
Processing by Devise::SessionsController#new as HTML 
Rendered devise/shared/_links.erb (2.5ms) 
Rendered devise/sessions/new.html.erb within layouts/application (14.2ms) 
Completed 200 OK in 52ms (Views: 20.8ms | ActiveRecord: 0.0ms) 

RECIPES_CONTROLLER:

class RecipesController < ApplicationController 
before_filter :authenticate_user! 
load_and_authorize_resource 

def destroy 
    @recipe = Recipe.find(params[:id]) 
    @recipe.destroy 
    redirect_to recipes_url, :notice => "Successfully destroyed Recipe." 
end 

ABILITY:

あなたは、あなたのレイアウトで <%= csrf_meta_tags %>を含めることを確認する必要がありアスカーあたり

答えて

0

回答、(下のコメントを参照)

============================

(オリジナルの返信)

Completed 401 Unauthorized in 44msから、それはあなたのように見えますユーザーはこのレシピを破棄することはできません。コンソールでこれを試してみてください... recipe.owner.idが5であることを

を確認してください:

user = User.find(5) 
puts user.role 
ability = Ability.new(user) 
ability.can? :destroy, Recipe.find(21) 

秒と最後のコマンドの出力は何ですか?

+0

ユーザーはSuperAdminであり、彼はレシピを所有しています... – Daniel

+0

答えへの更新を見る:コメントのコードを読むことはあまり読めない...出力を教えてください。 –

+0

ここで私の答えを期待しているかどうかわからない... 2番目のコマンドは私のためには動作しませんが、 "puts user.role?:super_admin"を入力するとTrueと表示されます。最後のコマンドはTrueと表示されます。ユーザーにレシピを破棄する権限がない場合、アプリケーションはデベロッパセッションを閉じません。 – Daniel