2

モデル用のRESTfulコントローラーがありますUserResource。というカスタムアクションを追加しましたremote_update。ユーザーのIDが一致する場合にのみそのアクションを制限したいと思います。

if user.has_role? :admin
  can :manage, :all

elsif user.has_role? :regular
  can [:remote_update], UserResource, :user_id => user.id

end

load_and_authorize_resourceコントローラーで使用しています。

問題は、ユーザーIDが一致しなくても、ユーザーがそのアクションを使用できることです。(テストするために、Firebugを使用し、idの非表示の値を変更しています)。

私のルートは次のとおりです。

resources :user_resources do

collection do
  post 'remote_update'
end

終わり

https://github.com/ryanb/cancan/wiki/Authorizing-controller-actionsによると、カスタムアクションがある場合、Cancanは次のリンクからIDを使用してリソースを読み込もうとします。

def discontinue
 # Automatically does the following:
 # @product = Product.find(params[:id])
 # authorize! :discontinue, @product
end

GETやPUTではなくPOSTであるため、IDを定義していません。能力を構築する方法についての考え?ありがとうございました。

4

1 に答える 1

1

POSTを使用して更新('remote_update')を実行しようとしているようです。POSTは作成することになっているため、通常はIDが入力されていません。したがって、CanCanがあなたに代わってそのルックアップを行うことは期待していません。

私はあなたに次のいずれかを提案します:

製品を手動で見つけて、中止方法で承認します。

また

PUTを使用する

ところで、能力は私には正しいように見えます。

于 2012-10-17T19:27:39.987 に答える