3

私は現在、Webアプリでcancanを使用しており、これまでのところうまく機能していますが、レール内のネストされたリソースに関して問題があります。インデックスページにアクセスするとき、cancanは、ログインしている別のユーザーが見ることができるものをユーザーが見ることを制限しません。ショーページでは問題なく動作しますが、インデックスページにアクセスすると機能しません。

ルート.rb

resources :skater do
  resources :videos
end

ability.rb

can :manage, Video, :skater => { :user_id => user.id }

video_controller.rb

load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :current_user

ユーザーAがユーザーBのビデオを表示できないように、別のユーザーのインデックスビューへのアクセスを制限するにはどうすればよいですか?

4

2 に答える 2

2

削除:through => :current_userして、問題が解決したかどうかを確認してください。CanCan Wikiの2番目のコード例を見て、ネストされたリソースがどのように使用されるかを確認してください。

CanCanはcurrent_user、アプリケーションのメソッドを介して現在のユーザーを取得します。このため、コントローラーアクションを承認するときに定義する必要はありません。


更新:コントローラーでこれを使用してみてください。

load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :skater

更新2: CanCanがAbility Precedenceのために失敗しているのか、現在のユーザーが単に許可されていないために失敗しているのかわかりません。

私がこれまで見てきたことに基づいて、これはあなたのability.rbファイルがどのように見えるべきかです。2行目は、最初の行を上書きして、表示および変更できる量を制限できるようにします。:manageすべての権限を含めることで「すべてのベースをカバーする」ため、使用することにしました。

cannot :manage, Video # this will include :read, :show, :edit, :update, and :delete
can :manage, Video, :skater => { :user_id => user.id }

私の懸念は、スケーターを正しくフィルタリングしていないことです。問題がある場合は、これを試してみることをお勧めします。

can :manage, Video, :user_id => user.id
于 2012-08-31T02:30:40.703 に答える
0

あなたはこの質問をチェックするべきです、それはあなたと同じ問題です。

Cancanのnested_routesはアクセスを:indexに制限します

于 2012-08-31T00:22:41.893 に答える